8種常見的經典排序

2021-08-15 10:20:46 字數 2032 閱讀 8168

8種常見的經典排序 分類

1)插入排序(直接插入排序、希爾排序)

2)交換排序(氣泡排序、快速排序)

3)選擇排序(直接選擇排序、堆排序)

4)歸併排序

5)分配排序(基數排序)

特點:所需輔助空間最多:歸併排序

所需輔助空間最少:堆排序

平均速度最快:快速排序

不穩定:快速排序,希爾排序,堆排序

1.直接插入排序

基本思想:在要排序的一組數中,假設前面

(n-1)[n>=2]

個數已經是

排好順序的,現在要把第

n個數插到前面的有序數中,使得這

n個數也

是排好順序的。如此反覆迴圈,直到全部排好順序。 2.

希爾排序(最小增量排序)

基本思想:演算法先將要排序的一組數按某個增量d(

n/2,n

為要排序數的個數)分成若干組,每組中記錄的下標相差

d.對每組中全部元素進行直接插入排序,然後再用乙個較小的增量(

d/2)對它進行分組,在每組中再進行直接插入排序。當增量減到

1時,進行直接插入排序後,排序完成。 3.

簡單選擇排序

基本思想:在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換

;然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。 4.

堆排序基本思想:堆排序是一種樹形選擇排序,是對直接選擇排序的有效改進。 5.

氣泡排序

基本思想:在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。 6.

快速排序

基本思想:選擇乙個基準元素

,通常選擇第乙個元素或者最後乙個元素

,通過一趟掃瞄,將待排序列分成兩部分

,一部分比基準元素小

,一部分大於等於基準元素

,此時基準元素在其排好序後的正確位置

,然後再用同樣的方法遞迴地排序劃分的兩部分。

7.歸併排序

基本排序:歸併(

merge

)排序法是將兩個(或兩個以上)有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。 8.

基數排序

基本思想:將所有待比較數值(正整數)統一為同樣的數字長度,數字較短的數前面補零。然後,從最低位開始,依次進行一次排序。這樣從最低位排序一直到最高位排序完成以後

,數列就變成乙個有序序列。 總結

一、穩定性:

穩定:氣泡排序、插入排序、歸併排序和基數排序

不穩定:選擇排序、快速排序、希爾排序、堆排序

二、平均時間複雜度

o(n^2):

直接插入排序,簡單選擇排序,氣泡排序。

在資料規模較小時(

9w內),直接插入排序,簡單選擇排序差不多。當資料較大時,氣泡排序演算法的時間代價最高。效能為

o(n^2)

的演算法基本上是相鄰元素進行比較,基本上都是穩定的。 o(

nlogn

):快速排序,歸併排序,希爾排序,堆排序。

其中,快排是最好的,其次是歸併和希爾,堆排序在資料量很大時效果明顯。

三、排序演算法的選擇 1.

資料規模較小 (

1)待排序列基本序的情況下,可以選擇

直接插入排序;

(2)對穩定性不作要求宜用簡單選擇排序,對穩定性有要求宜用插入或冒泡 2.

資料規模不是很大 (

1)完全可以用記憶體空間,序列雜亂無序,對穩定性沒有要求,

快速排序

,此時要付出

log(

n)的額外空間。 (

2)序列本身可能有序,對穩定性有要求,空間允許下,宜用歸併排序 3.

資料規模很大 (

1)對穩定性有求,則可考慮歸併排序。 (

2)對穩定性沒要求,宜用堆排序 4.

序列初始基本有序(正序),宜用直接插入,冒泡

8種常見排序

堆排序 二叉樹模型 include 交換函式 void swap int a,int i,int j 列印陣列 void printa int a,int len printf n void heapify int a int i,int len void heapsort int a,int le...

8種經典排序之氣泡排序

氣泡排序是穩定的排序方法。基本思想 像泡泡一樣,輕的往上浮,重的向下沉。即小的往前,大的往後。從最後開始比較,依次比較。即array n 1,n 2 array n 2.n 3 array 2,1 array 1,0 在第一輪將最小的數浮到第乙個,開始第二輪比較。還是從最後開始,依次比較。即arra...

七種常見經典排序演算法總結 C

最近想複習下c 很久沒怎麼用了,畢業時的一些經典排序演算法也忘差不多了,所以剛好一起再學習一遍。除了冒泡 插入 選擇這幾個複雜度o n 2 的基本排序演算法,希爾 歸併 快速 堆排序,多多少少還有些晦澀難懂,幸好又大神dreamcatcher cx都總結成了 一步步很詳細,十分感謝。而且就時間複雜度...