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:
");
17     print(a,10);
18 
19     bubble(a, 10);
20     printf("after sort:
");
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("
");
44 }
View Code

在VS2015上运行如图所示:

 具体的冒泡排序算法,示意图我是转载的skywang12345:http://www.cnblogs.com/skywang12345/p/3596232.html

原文地址:https://www.cnblogs.com/xuelanga000/p/11382177.html