資料結構 筆記:氣泡排序和希爾排序
阿新 • • 發佈:2018-11-14
氣泡排序的基本思想
-每次從後向前進行(假設為第i次),j = n -1 ,n- 2,...,i,兩輛比較 V[j-1]和V[j]的關鍵字;如果發生逆序,則交換V[j-1]和V[j].
template <typename T> static void Bubble(T array[], int len, bool min2max = true) { bool exchange = true; for(int i = 0;(i <len) && exchange;i++) { exchange = false; for(int j = len-1;j > i;j--) { if(min2max? (array[j] < array[j-1]) :(array[j] > array[j-1]) ) { Swap(array[j],array[j-1]); exchange = true; } } } }
希爾排序的基本思想
-將待排序列劃分為若干組,在每一組內進行插入排序,以使整個序列基本有序,然後在對整個序列進行插入排序
template < typename T> static void Shell(T array[] , int len, bool min2max = true) { int d = len; do { d = d / 3 + 1; for(int i = d;i<len;i++) { int k = i; T e = array[i]; for(int j=i-d;(j>=0) && (min2max? (array[j]>e) :(array[j] <e));j-=d) { array[j+d] = array[j]; k = j; } if(k != i) { array[k] = e; } } }while( d > 1); }
總結:
-氣泡排序每次從後向前將較小的元素互動到位
-氣泡排序是一種穩定的排序法,其複雜度為O(n^2)
-希爾排序通過分組的方式進行多次插入排序
-希爾排序是一種不穩定的排序法,其複雜度為O(n^ 3/2)