經典排序演算法簡單總結

2021-08-17 22:56:17 字數 1511 閱讀 1735

01.氣泡排序:

時間複雜度: o(n^2)

02.選擇排序:

思路:最開始交換區間是0~n-1,當前元素和其後面的所有元素比較,選出最小值,放到當前的位置;然後下標後移,再選出當前最小值,放到當前位置;以此類推。

時間複雜度: o(n^2)

03.插入排序:

思路:遍歷陣列,從第乙個元素開始,找到當前元素之前的序列中第乙個大於當前元素的位置[因為構造的這個序列是有序的],從該位置開始到當前位置-1,向後移乙個位置[把當前元素覆蓋];把當前元素插入到第乙個大於當前元素的位置,然後處理下乙個元素。

時間複雜度: o(n^2)

04.歸併排序:

思路:先讓陣列中的每個元素成為長度為1的有序區間,然後把相鄰的長度為1的有序區間進行合併,形成最大長度為2的有序區間,以此類推,直到陣列中的元素成為乙個有序區間為止。【先拆分,後合併】

時間複雜度: o(n*logn)

05.快速排序:

思路:從待排序列中取任一資料(如第乙個資料)作為分界值,所有比它小的元素一律放到左邊,比它大的元素一律放到右邊。這樣經過一趟下來形成兩個序列,左邊序列元素的值都比分界值小,右邊序列元素的值都比分界值大,對左右兩個序列也進行同樣操作,使得陣列有序。一次排序的時間複雜度為o(n)

快速排序乙個潛在的缺點在於它是一種不穩定的排序演算法,考慮對乙個已經有序的陣列進行快速排序,會發現每次切分點都在陣列的邊緣,這時演算法的效率將退化到 o(n

2) 級別。為了規避這個缺陷,在實際應用中,在進行快速排序之前需要對被排序陣列進行隨機亂序處理。

時間複雜度: o(n*logn)

06.堆排序:

思路:首先把陣列中的元素建成乙個大小為n的大頂堆,堆頂是陣列元素的最大值,把堆頂和堆的最後乙個元素交換,把最大值存在陣列最後的位置,脫離堆結構,作為陣列的有序部分。接下來把大小為n-1的堆進行大頂堆的調整,重複之前的操作。

時間複雜度: o(n*logn)

07.希爾排序:

思路:插入排序改良演算法,插入排序步長是1,插入時每一次和前面的乙個數比較;而希爾排序的步長是不斷調整的,但是都會以步長為1作為結束。所以希爾排序的關鍵是步長的選擇,步長選擇越優,時間複雜度越低。

時間複雜度: o(n*logn)

08.基於桶排序思想:不是基於比較的演算法

計數排序

基數排序

時間複雜度:o(n)

經典排序演算法的空間複雜度:

o(1):氣泡排序、選擇排序、插入排序、希爾排序、堆排序

o(logn)~o(n):快速排序

o(n):歸併排序

o(m):桶排序

排序演算法的穩定性:待排序列中,相同的元素相對位置是否改變。

穩定的排序演算法:氣泡排序、插入排序、歸併排序、基數排序、計數排序、桶排序

不穩定的排序演算法:選擇排序、快速排序、希爾排序、堆排序

排序演算法無優劣,選擇和待排元素有關。

快速排序並不比堆排序和插入排序優良,只是常量係數比較小。

工程上的排序是綜合排序,當陣列較小時選擇插入排序,陣列較**擇快速排序或其他o(n*logn)的排序。

經典排序演算法總結

排序演算法是離散數學和資料結構學科最基本的演算法,雖然知道這些排序演算法的名字,但是一直沒有研究過它們的實現原理。現在把它們收集起來,並一一親自實現,來加深對排序演算法的理解。1,氣泡排序 最簡單的排序演算法,從第乙個元素開始比較相鄰元素大小,如果前邊元素大於後邊元素則交換位置,否則將下標移到下乙個...

經典排序演算法總結

插入排序 選擇排序 歸併排序 排序方法 平均情況 最好最差 空間複雜度 穩定性氣泡排序o n2 o n 2 o n o n o n2 o n 2 o 1 o 1 穩定快速排序o nlogn o nlog n o nlogn o nlog n o n2 o n 2 o nlogn o nlog n 不...

經典排序演算法複習總結

前置定義 in place sort 不占用額外記憶體或占用常數的記憶體 插入排序 選擇排序 氣泡排序 堆排序 快速排序。out place sort 歸併排序 計數排序 基數排序 桶排序。stable sort 插入排序 氣泡排序 歸併排序 計數排序 基數排序 桶排序。unstable sort ...