資料結構複習 常用排序演算法小結

2021-10-07 14:41:40 字數 2538 閱讀 9591

演算法特點

面試考點

選擇排序演算法準則

比較類,非比較類

平均的時間效能

時間複雜度為 o(nlogn) :快速排序、堆排序和歸併排序

時間複雜度為 o(n^2 ) :直接插入、冒泡和簡單選擇排序

時間複雜度為 o(n) : 基數排序

當待排記錄序列按關鍵字順序有序時

直接插入和氣泡排序:o(n)

快速排序:o(n^2) 。

原表是否有序,對簡單選擇排序、堆排序、歸併排序和基數排序的時間複雜度影響不大。

所有的簡單排序方法(直接插入、起泡和簡單選擇) 和堆排序的空間複雜度為 o(1) ;

快速排序為 o(logn),為遞迴程式執行過程中,棧所需的輔助空間 ;

歸併排序所需輔助空間最多,其空間複雜度為o(n);

鏈式基數排序需附設佇列首尾指標 , 則空間複雜度為 o(rd) 。

排序演算法的穩定性:若待排序的序列中,存在多個具有相同關鍵字的記錄,經過排序,這些記錄的相對次序保持不變,則稱該演算法是穩定的;若經排序後,記錄的相對次序發生了改變,則稱該演算法是不穩定的。

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

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

包括直接插入排序 , 二分插入排序 ,希爾排序

直接插入排序:對於有 n 個資料元素的待排序序列,n - 1 次資料比較 ,最好情況 0 次資料移動 (待排序的資料已經有序)。

注意:當 n<16(一說是n<8) 時 , 直接插入比 o(nlogn) 的排序方法快。

二分插入排序: 用二分查詢方法找出應該插入的位置; 二分插入排序減少了關鍵字的比較次數 ,但資料元素的移動次數不變 , 其時間複雜度與直接插入排序相同。

希爾排序:設定增量作為距離,按照相同距離分組,對每組進行插入排序。減小增量,重複上述步驟。

綜上,插入排序對基本已經排好序的列表有較好的時間複雜度。

包括氣泡排序 , 快速排序。

快速排序:顧名思義。找到基準元素,遍歷列表,大於或等於基準元素的放在基準元素的後面,小於基準元素的放在基準元素的前面。確定基準元素的位置之後,利用分治的思想快排基準元素前後的兩個子列。

基準元素的選取:快排不穩定,貿然選擇陣列第乙個元素可能導致最壞結果(如果排序記錄基本有序,選擇的元素恰為最小元素,時間複雜度o(n^2))。因此可以選擇第乙個資料元素、最後乙個資料元素、中間位置的資料元素的中位數

包括簡單選擇排序,堆排序。

多為二路歸併排序。

二路歸併排序: 分而治之,一趟歸併的時間複雜度為 o(n), 總共需進行 log2n 趟。

包括計數排序,桶排序,基數排序,是根據關鍵字本身的性質進行排序,不通過待排序資料元素之間的比較。

桶排序:每個資料元素關鍵字的值將其分配到相應的桶中,要求關鍵字的取值範圍已知。

基數排序:「 分配 」 時,按當前「關鍵字位」所取值,將記錄分配到不同的「桶」中,每個佇列「桶」中記錄的 「關鍵字位」 相同;「 收集 」時,按當前關鍵字位取值從小到大將各「桶」首尾相鏈成乙個鍊錶。對每個關鍵字位均重複上兩步。

「 分配 」和「 收集 」的實際操作僅為修改鍊錶中的指標和設定佇列的頭、尾指標;

除了比較基本的各個排序演算法的定義、特點,時間複雜度和空間複雜度分析以外,還經常考察演算法的使用場景,演算法的改進方法等。

方法2:設定布林變數issorted作為標記。如果在本輪排序中,元素有交換,則說明數列無序;如果沒有元素交換,說明數列已然有序,直接跳出大迴圈。

方法3:雙向氣泡排序。

一般而言,需要考慮的因素有以下四點:

設待排序元素的個數為n.

1)當n較大,則應採用時間複雜度為o(nlog2n)的排序方法:快速排序、堆排序或歸併排序序。

2)當n較大,記憶體空間允許,且要求穩定性:歸併排序

3)當n較小,可採用直接插入或直接選擇排序。

直接插入排序:當元素分布有序,直接插入排序將大大減少比較次數和移動記錄的次數。

直接選擇排序 :元素分布有序,如果不要求穩定性,選擇直接選擇排序

5)一般不使用或不直接使用傳統的氣泡排序。

6)基數排序是一種穩定的排序演算法,但有一定的侷限性:

1、關鍵字可分解。

2、記錄的關鍵字位數較少,如果密集更好

3、如果是數字時,最好是無符號的

複習資料結構 排序演算法(二) 氣泡排序

這篇複習氣泡排序。氣泡排序也是一種穩定排序 內排序。氣泡排序的基本思想 對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即 每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。插入排序比氣泡排序快!上面說的是普通的氣泡排序演算...

資料結構中常見排序演算法複習

思想 從前往後遍歷,每次把未排序陣列中最大的元素交換到陣列最後。實現 2個for迴圈,第乙個迴圈表示冒泡次數,第二個迴圈從前往後遍歷未排序陣列,如果前面的元素大於後面的元素,交換,直至到達已排序部分的最前面 void bubblesort int a,int left,int right 快速排序也...

資料結構與演算法小結 排序(六)

3.2 快速排序 快速排序綜合效能優越,其主要思想在於找乙個pivotvalue,通過不斷的比較 交換,將序列變成pivotvalue前的值都比它小,在其後的值都比它大 然後,再對pivotvalue前面的序列和後面的序列分別使用同樣的方法得到具有該性質的序列.不斷遞迴呼叫至最底層即排好序。其基本流...