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
今日推荐
周排行