十大排序演算法筆記 資料結構

2021-10-11 17:42:35 字數 2744 閱讀 9740

直接插入排序

用0號位置作為哨兵,把r[i]放r[0]裡

將待排序的放在陣列裡

for(i從2到length)迴圈,每迴圈乙個i與前面已經排好序的每乙個值比較,如果比第i個數小,則把r[0]插入到第i個數裡面

插入前,每乙個數需要往後移乙個單位再插入

(前插法或後插法都可)

折半插入排序

在原本有序的的序列r[1]中乙個個插入

把r[i]的只放到r[0]當哨兵

for(i從2到length)迴圈,low=1,high=i,mid=(low+high)/2乙個個嘗試

while(low<=high)

(1)當r[i]此時當low=high時,找到需要插入的位置,插到high+1處

把插入位置整體往後移插入r[0]即可

希爾排序

迴圈每一趟增量(從小到大,最後為1)

每一趟增量下間隔的數利用直接插入排序

氣泡排序

迴圈1到len,從1開始到m進行兩兩比較,如果前乙個比後乙個大,則調換順序。每次迴圈後len–,因為相當於後面已經排好了,只需排前面即可)兩層迴圈

如果本趟無交換,那麼下面的就無需進行交換了,用flag來進行記載

void

sort

(int

**d,

int pointssize)

//氣泡排序

m--;//}}}

python

num =[4

,2,7

,42,5

,3,9

,8]for i in

range

(len

(num)-1

):count =

0for j in

range

(len

(num)

- i -1)

:if num[j]

> num[j+1]

: count =

1 temp = num[j]

num[j]

= num[j+1]

num[j+1]

= temp

if count ==0:

break

print

(num)

快速排序

取第乙個數當pivot(中心),用0儲存。

從表的兩端向中間掃瞄,最左為low,最右為high

(1)if r[low]r[pivot], then high左移,把比pivot小的值移到pivot左邊,反之移到右邊

可用遞迴完成,遞迴到low=high結束

**如下

int

partition

(int

*d,int low,

int high)

//分割函式得pivot(第一趟排序)

else

k[low]

= k[high]

;for

(;k[low]

<= pivot;

) k[high]

= k[low];}

k[low]

= k[0]

;//記錄中間的數

return low;}}

intquicksort

(int

*k,int low,

int high)

簡單選擇排序

從r[1]到r[len]比較,i從1開始迴圈到len每次選出最小的數與r[i]進行交換

堆排序先把值全部放在樹里

將建好樹利用篩選法調整堆,調整成大根堆。篩選法: s是2s和2s+1的根,在r[2s]和r[2s+1]選出最大的值與r[s]比較,如果r[s]較小,則交換調整成大根堆,此時再看以r[2s]為結點的根堆是否為大根堆,如果不是則重複上述步驟調整成大根堆。用乙個迴圈for(j=2s;j進行堆排序演算法: 將堆頂元素乙個個與從後往前的結點交換,每一次交換要看是否為大根堆,如果不是則需要調整成大根堆,再進行交換。當迴圈結束是為乙個由大到小的樹,利用層次遍歷(逐一輸出陣列)即可得

歸併排序

把乙個錶用二分法,遞迴兩個由中間切開的表,使兩個表都是有序的。

將兩個有序表每次分別由小到大取出乙個值比較,小的值放入另乙個空表中

基數排序

分配+收集

按最高位優先法或最低位優先法分配和收集交替進行。

內部排序時間複雜度和空間複雜度比較

說明:基數排序中n是每一趟分配的時間複雜度,rd是每一趟分配的時間複雜度,n個記錄,每個記錄有d個關鍵字

十大排序演算法

1.非線性時間類排序 時間複雜度未突破 0 nlog 2n 不穩定的四個排序演算法 選擇排序 0 n2 希爾排序 0 n1.3 希爾排序實現python 快速排序 0 n log2 n 0 nlog 2n 0 nlog 2 n 快速排序實現c python 堆排序 0 n log2 n 0 nlog...

十大排序演算法

排序規則 從左至右依次增大 一 基於比較的排序演算法 插入排序 逐個遍歷未排序序列,將其在已排序序列中從右到左比較,直到遇到比自己小的數,然後將元素插入到那個數的後面,有序序列從左向右生長。選擇排序 在未排序序列中選擇最小的元素,將其插入到已排序序列的末尾,有序序列從左向右生長。氣泡排序 從左至右逐...

十大排序演算法

github 排序演算法是 資料結構與演算法 中最基本的演算法之一。排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有 插入排序 希爾排序 選擇排序 氣泡排序 歸併排序...