1. 程式人生 > >數據結構中的排序算法總結

數據結構中的排序算法總結

數字 順序 i+1 www 位置 元素 簡單 組成 pivot

數據結構中的排序算法

技術分享圖片

當待排序序列基本有序時優先選擇簡單排序,快速排序平均次數少於堆排序

1 插入排序

1) 直接插入排序

第一次將位置0和位置1進行比較,小的放前。
第二次將位置2上的數字,插入到位置0和位置1中。

第k次將位置k上的數字,插入到第k-1次已經完成的序列中。

    5  2  6  0  3  9  1  7  4  8

一趟  2  5  6  0  3  9  1  7  4  8

二趟  2  5  6  0  3  9  1  7  4  8

三趟  0  2  5  6  3  9  1  7  4  8

四趟  0  2  3  5  6  9  1  7  4  8

五趟  0  2  3  5  6  9  1  7  4  8

六趟  0  1  2  3  5  6  9  7  4  8

七趟  0  1  2  3  5  6  7  9  4  8

八趟  0  1  2  3  4  5  6  7  9  8

九趟  0  1  2  3  4  5  6  7  8  9

2)希爾排序

先將整個待排元素序列分割成若幹個子序列(由相隔某個“增量”的元素組成的)分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序(增量足夠小)時,再對全體元素進行一次直接插入排序。

        49  38  65  97  76  13

  27  49  55  04

第一趟增量5  13  27  49  55  04  49  38  65  97  76

第二趟增量3  13  04  49  38  27  49  55  65  97  76 

第三趟增量1  04  13  27  38  49  49  55  65  76  97     

2 選擇排序

選擇排序每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的數據元素排完。

每次都是遍歷一遍剩下要排序的部分,找出其最大值或最小值。關鍵碼比較次數與記錄地初始排列無關

1)直接選擇排序


第一次取區間[0,N],選擇該區間最小的數和位置0的數進行交換;
第二次取區間[1,N],選擇該區間最小的數和位置1的數進行交換;
第三次取區間[2,N],選擇該區間最小的數和位置2的數進行交換;
依次往下,可以得到排序,這就是選擇排序。

ex
      8  5  9  3  7

遍歷1號  3  5  9  8  7

遍歷2號  3  5  9  8  7

遍歷3號  3  5  7  8  9

遍歷4號   3  5  7  8  9

2)堆排序

3 交換排序

1)冒泡排序

第一次取區間[0,N],通過比較第i個和第i+1個的大小,如果第i+1個數字小於第i個,則互換。
第二次取區間[0,N-1],通過比較第i個和第i+1個的大小,如果第i+1個數字小於第i個,則互換。

2)快速排序

1從序列當中選擇一個基準數(pivot)

2將序列當中的所有數依次遍歷,比基準數大的位於其右側,比基準數小的位於其左側

重復步驟1.2,直到所有子集當中只有一個元素為止。

技術分享圖片

技術分享圖片

4 歸並排序

數據結構中的排序算法總結