数据结构 --- 冒泡排序

 1 //冒泡排序的定义:两两比较相邻记录的关键字,反序则交换,直到没有反序的记录为止。属于交换排序
 2 
 3 //假性冒泡排序,即非冒泡排序,不满足与相邻的元素一一比较,只是拿某一个位置的元素,与该位置之后的元素作比较
 4 void BubbleSortFake(SqList *L)
 5 {
 6     for (int i = 1; i < L->length; ++i)
 7     {
 8         for (int j = i + 1; j <= L->length; ++j)
 9         {
10             if (L->array[i] > L->array[j])
11                 swap(L, i, j);
12         }
13     }
14 }
15 
16 //正宗的冒泡排序
17 void BubbleSort(SqList *L)
18 {
19     //i其实就是起  控制比较次数  的作用的
20     for (int i = 1; i < L->length; ++i)
21     {
22         for (int j = L->length - 1; j >= i; ++j)
23         {
24             if (L->array[j] > L->array[j + 1])
25                 swap(L, j, j + 1);
26         }
27     }
28 }
29 
30 //优化后的冒泡排序
31 void BubbleSortOptimize(SqList *L)
32 {
33     int tmp = 1;
34     for (int i = 1; i < L->length - 1 && tmp == 1; ++i)
35     {
36         tmp = 0;
37         for (int j = L->length - 1; j >= i; j++)
38         {
39             if (L->array[j] > L->array[j + 1])
40             {
41                 swap(L, j, j + 1);
42                 tmp = 1;
43             }
44         }
45     }
46 }
47 
48 //冒泡排序的复杂度分析:
49 //最好的情况,即数据已经是有序表,需要的比较次数 n-1,时间复杂度为 O(n);
50 //最坏的情况,即数据为完全逆序,需要比较的次数 (n-1)+ (n-2) + (n-3) + (n-4) + ... + ... + 2 + 1 ,即 (n-1)* n / 2 次,时间复杂度为 O(n^2)

猜你喜欢

转载自www.cnblogs.com/luguoshuai/p/9433625.html