冒泡排序的基本思想是:交换。
1.即比较相邻的前后两个数据,如果前面的数据大于后面的数据,就进行一次交换;
2.这样每经过一躺比较后就有一个最大的数下沉到底部,直到整个数组有序。
算法的代码实现如下:
1 /*冒泡排序算法的实现代码1:*/ 2 void bubblesort(int a[], int n) 3 { 4 int i, j; 5 6 for(i = 0; i < n; i++) 7 for(j = 1; j < n-i; j++) 8 if(a[j-1] > a[j]) 9 swap(&a[j-1], &a[j]); 10 }
代码1效率太低,当整个数组已经达到有序时,此时不应该继续比较和交换,解决方案是设置标志位。
/*冒泡排序算法的实现代码2:*/
1 void bubblesort(int a[], int n) 2 { 3 int j, k; 4 bool flag; 5 6 flag = true; 7 k = n; 8 while(flag) 9 { 10 flag = false; 11 12 for(j = 1; j < k; j++) 13 if(a[j-1] > a[j]) 14 { 15 swap(&a[j-1], &a[j]); 16 flag = true; 17 } 18 k--; 19 } 20 }
代码2就是常用的排序算法,不过当排序的数据很多,但只有前面几个数据是无序的,就需要每次记住最后交换数据的位置。
1 /* 冒泡排序算法的代码实现3 */ 2 void bubblesort(int a[], int n) 3 { 4 int j, k; 5 int flag; 6 7 flag = n; 8 while(flag > 0) 9 { 10 k = flag; 11 flag = 0; 12 13 for(j = 1; j < k; j++) 14 if(a[j-1] > a[j]) 15 { 16 swap(&a[j-1], &a[j]); 17 flag = j; 18 } 19 } 20 }