起泡法的理解及基本思路:
通俗理解就是将小的数浮上来,大的则沉底(小浮大沉)。
基本思路 每次将相邻两个数比较,将小的调到前面。如下图所示:
显而易知,共有六个数,在第一趟排序时,需要进行5次两两比较;在第二趟,则需进行4次比较;以此类推,在最后一趟时(第五趟),只需比较1次。因此,得出结论:若有n个数,则要进行n-1趟比较,在第一趟要进行n-1两两比较,在第j趟则要进行n-j次比较。
例如:有10个地区的面积,要求对他们按由小到大的排列。
【C语言 代码】
#include <stdio.h>int main(){int a[10];int i,j,t;printf("input 10 numbers:\n");for(i = 0; i < 10; i++ ){scanf("%d",&a[i]);}printf("\n");***for(j = 0; j < 9; j++){ //进行9次循环,实现9趟比较for(i = 0; i < 9-j; i++){ //在每一趟中进行9-j次比较if(a[i] > a[i+1]){t = a[i];a[i] = a[i+1];a[i+1] = t;}}}***printf("the sorted number :\n");for(i = 0; i < 10; i++ ){printf("%d",a[i]);}printf("\n");return 0;
}
【Java语言 代码】
public class MaoPaoFa {public static void bubbleSort(int[] arr) {/*for(int i = 0; i < arr.length; i ++) {//进行array.lengrh次循环,实现array.lengrh-1趟比较for(int j = 0; j < arr.length - i - 1; j ++) {//在每一趟中进行array.lengrh-i-1次比较if(arr[j] > arr[j+1]) {int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}*///这一层好比控制天花板for(int tianHuaBan = arr.length - 1; tianHuaBan >= 0; tianHuaBan --) {//在天花板范围内将最大的数值顶到天花板for(int i = 0; i < tianHuaBan; i++) {if(arr[i] > arr[i+1]) {int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}}System.out.println("冒泡法排序后:");for(int i = 0; i < arr.length; i ++) {System.out.println(arr[i]);}}public static void main(String[] args) {// TODO Auto-generated method stubint[] array = new int[10];Scanner scr = new Scanner(System.in);System.out.println("请输入数值:");for(int i = 0; i < array.length; i++) {array[i] = scr.nextInt();}MaoPaoFa.bubbleSort(array);}
}
嘿嘿,本题的代码已敲完, 这只是单纯的冒泡法,对于排序的算法有好多种,例如还有选择法、希尔法等等,后续继续更新。