C语言练习之 冒泡排序(二)
继上次写直接插入排序,有一段时间了,现在再写上冒泡排序,该排序算法,容易记忆,在小规模的场景中
应用比较广泛,一旦需要解决的问题规模变大,该排序算法的效率明显降低因为该算法的时间复杂度为ο(n2)所以
选择冒泡排序的时候需要慎重考虑问题的规模。其实冒泡排序可以用一个公式总结:如果有N个数需要排序,首先
考虑两重循环外层循环for(int i=0;i<N-1;i++),内层循环for(int j=0;j<N-i-1;j++),即内层循环数=N-外层循环计数-1
1 #include <string> 2 #include<iostream> 3 4 #define SWAP(X,Y) X=X+Y;Y=X-Y;X=X-Y 5 6 using namespace std; 7 8 9 10 void bubble(int a[],int len); //统计value中"1"的个数 11 void print(int a[], int len); 12 13 int main(int argc, char *argv) { 14 15 int a[] = {1,2,3,4,5,6,7,8,9,10}; 16 printf("before sort:\n"); 17 print(a,10); 18 19 bubble(a, 10); 20 printf("after sort:\n"); 21 print(a, 10); 22 return 0; 23 24 25 } 26 27 void bubble(int a[],int len) { 28 int i, j; 29 for (i = 0; i < len - 1; i++) { 30 for (j = 0; j < len - i - 1; j++) { 31 if (a[j] < a[j+1]) { 32 SWAP(a[j], a[j+1]); 33 } 34 } 35 } 36 } 37 38 39 void print(int a[], int len) { 40 for (int i = 0; i < len; i++) { 41 printf("a[%d]=%d ", i, a[i]); 42 } 43 printf("\n"); 44 }
在VS2015上运行如图所示:
具体的冒泡排序算法,示意图我是转载的skywang12345:http://www.cnblogs.com/skywang12345/p/3596232.html