排序演算法小結

2021-09-24 14:08:46 字數 1680 閱讀 7698

學習排序演算法的思路?明確原理、掌握實現以及分析效能

如何分析排序演算法效能?從執行效率、記憶體消耗以及穩定性3個方面分析排序演算法的效能

執行效率:從以下3個方面來衡量:

a. 最好情況、最壞情況、平均情況時間複雜度;

b. 時間複雜度的係數、常數、低階:排序的資料量比較小時考慮; 

c. 比較次數和交換(或移動)次數

記憶體消耗:通過空間複雜度來衡量。針對排序演算法的空間複雜度,引入原地排序的概念,原地排序演算法就是指空間複雜度為o(1)的排序演算法

穩定性:如果待排序的序列中存在值等的元素,經過排序之後,相等元素之間原有的先後順序不變,就說明這個排序演算法時穩定的。

排序原理:

a. 氣泡排序只會操作相鄰的兩個資料;

b. 對相鄰兩個資料進行比較,看是否滿足大小關係要求,若不滿足讓它倆互換;

c. 一次冒泡會讓至少乙個元素移動到它應該在的位置,重複n次,就完成了n個資料的排序工作;

d. 優化:若某次冒泡不存在資料交換,則說明已經達到完全有序,所以終止冒泡

效能分析:執行效率:最小時間複雜度(資料完全有序時,只需進行一次冒泡操作即可,時間複雜度是o(n))、最大時間複雜度(資料倒序排序時,需要n次冒泡操作,時間複雜度是o(n^2))、平均時間複雜度(通過有序度和逆序度來分析)

什麼是有序度?

有序度是陣列中具有有序關係的元素對的個數,比如[2,4,3,1,5,6]這組資料的有序度就是11,分別是[2,4][2,3][2,5][2,6][4,5][4,6][3,5][3,6][1,5][1,6][5,6]。同理,對於乙個倒序陣列,比如[6,5,4,3,2,1],有序度是0;對於乙個完全有序的陣列,比如[1,2,3,4,5,6],有序度為n*(n-1)/2,也就是15,完全有序的情況稱為滿有序度

什麼是逆序度?

逆序度的定義正好和有序度相反。核心公式:逆序度=滿有序度-有序度

空間複雜度:每次交換僅需1個臨時變數,故空間複雜度為o(1),是原地排序演算法

演算法穩定性:如果兩個值相等,就不會交換位置,故是穩定排序演算法

演算法原理:

首先,將陣列中的資料分為2個區間,即已排序區間和未排序區間。初始已排序區間只有乙個元素,就是陣列的第乙個元素。插入演算法的核心思想就是取未排序區間中的元素,在已排序區間中找到合適的插入位置將其插入,並保證已排序區間中的元素一直有序。重複這個過程,直到未排序中元素為空,演算法結束

.效能分析:

a. 時間複雜度:最好、最壞、平均情況

如果要排序的陣列已經是有序的,我們並不需要搬移任何資料。只需要遍歷一遍陣列即可,所以時間複雜度是o(n)。如果陣列是倒序的,每次插入都相當於在陣列的第乙個位置插入新的資料,所以需要移動大量的資料,因此時間複雜度是o(n^2)。而在乙個陣列中插入乙個元素的平均時間複雜都是o(n),插入排序需要n次插入,所以平均時間複雜度是o(n^2)。

b. 空間複雜度:從上面的**可以看出,插入排序演算法的執行並不需要額外的儲存空間,所以空間複雜度是o(1),是原地排序演算法

c. 演算法穩定性:在插入排序中,對於值相同的元素,我們可以選擇將後面出現的元素,插入到前面出現的元素的後面,這樣就保持原有的順序不變,所以

是穩定的

排序演算法小結

1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。1 如果不多於1個資料,直接返回。2 一般選擇序列最左邊的值作為支點資料。3 將序列分成2部分,一部分都大於支點資料,另外一部分都小於支點資料。4...

排序演算法小結

1 歸併排序 3.區別與聯絡 遞迴是從未知推到已知,相當於把未知的東西壓入棧,等到可以算出結果了,就一步一步出棧。迭代是從已知到未知,從已知的東西一步一步推至目標。遞迴與迭代就好像一對逆元。遞迴的 更加清晰,但開銷更大,也更容易出錯,除錯較困難 而迭代的 編寫更困難,但速度和開銷較小。4.空間占用 ...

排序演算法小結

演算法過程 假設乙個無序的序列,該演算法將其分成兩部分,前一部分已經完成排序 有序,一開始時只有乙個元素 後一部分任然無序,將後面序列選擇第乙個插入到前面的有序序列,如此直到所有完全有序。複雜度 最簡單的即為,整個序列原來即有序,按照一種最 省事 的方式,我們僅需比較n 1次即可。最複雜的情況,應該...