七大排序演算法

2021-09-11 17:40:35 字數 2908 閱讀 5616

快速記法

交換排序:

氣泡排序

快速排序

插入排序:

直接插入排序

希爾排序

選擇排序:

直接選擇排序

堆排序

歸併排序:

歸併排序
總結分析

排序方法

平均情況

最好情況

最差情況

輔助空間

穩定性氣泡排序

o(n^2)

o(n)

o(n^2)

o(1)

穩定快速排序

o(nlogn)

o(nlogn)

o(n^2)

o(logn)~o(n)

不穩定直接插入排序

o(n^2)

o(n)

o(n^2)

o(logn)~o(n)

穩定希爾排序

o(nlogn)~o(n^2)

o(n^1.3)

o(n^2)

o(1)

不穩定選擇排序

o(n^2)

o(n^2)

o(n^2)

o(1)

不穩定堆排序

o(nlogn)

o(nlogn)

o(nlogn)

o(1)

不穩定歸併排序

o(nlogn)

o(nlogn)

o(nlogn)

o(n)

穩定交換排序的基本思想都為通過比較兩個數的大小,當滿足某些條件時對它進行交換從而達到排序的目的

自己理解:從名字看,冒泡嘛,而且它是屬於交換排序中的,所以可以理解為每次都會出現乙個最大的泡出來,從計算機角度看就是,相互交換,一直到最後,最後乙個是最大的,就是氣泡排序

基本思想:

1.比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

2.對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該是最大的數。

3.針對上所有的元素重複以上的步驟,除了最後乙個。

4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較

演算法分析(網上找的)

時間複雜度:

若檔案的初始狀態是正序的,一趟掃瞄即可完成排序。所需的關鍵字比較次數和記錄移動次數均達到最小值。

若初始檔案是反序的,需要進行 趟排序。每趟排序要進行 次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值。

**(在這之前我們先來學習一些交換方式,面試中會有很好的印象)

基礎:

a=a+b;

b=a-b;

a=a-b;

稍微有點逼格:

a=a^b;

b=a^b;

a=a^b;

巨集定義實現:

#define swap(x,y)\

(y) = (y)+(x);\

(x) = (y)-(x);\

(y) = (y)-(x);

下面是冒泡演算法

#includeusing namespace std;

#define swap(a,b)\

(b) = (a) + (b);\

(a) = (b) - (a);\

(b) = (b) - (a);

int main();

for(int i=0;i<6;i++)

┊ }

}for(int i = 0;i <= 6;i++),稱為增量序列。希爾排序的增量序列的選擇與證明是個數學難題,我們選擇的這個增量序列是比較常用的,也是希爾建議的增量,稱為希爾增量,但其實這個增量序列不是最優的。此處我們做示例使用希爾增量。

基本思想:依次選出陣列最小的數放到陣列的前面。首先從陣列的第二個元素開始往後遍歷,找出最小的數放到第乙個位置。再從剩下陣列中找出最小的數放到第二個位置。以此類推,直到陣列有序。

基本思想:先把陣列構造成乙個大頂堆(父親節點大於其子節點),然後把堆頂(陣列最大值,陣列第乙個元素)和陣列最後乙個元素交換,這樣就把最大值放到了陣列最後邊。把陣列長度n-1,再進行構造堆,把剩餘的第二大值放到堆頂,輸出堆頂(放到剩餘未排序陣列最後面)。依次類推,直至陣列排序完成。

下圖為堆結構及其在陣列中的表示。可以知道堆頂的元素為陣列的首元素,某乙個節點的左孩子節點為其在陣列中的位置2,其右孩子節點為其在陣列中的位置2+1,其父節點為其在陣列中的位置/2(假設陣列從1開始計數)。

基本思想:歸併演算法應用到分治策略,簡單說就是把乙個答問題分解成易於解決的小問題後乙個個解決,最後在把小問題的一步步合併成總問題的解。這裡的排序應用遞迴來把陣列分解成乙個個小陣列,直到小陣列的數字有序,在把有序的小陣列兩兩合併而成有序的大陣列。

下圖為展示如何歸併的合成乙個陣列

七大排序演算法

氣泡排序 void bubble int a,int n 選擇排序 void select sort int a,int n n為陣列a的元素個數 將第i 小的數,放在第i 個位置 如果剛好,就不用交換 if i min index 插入排序 typedef int elementtype void...

七大排序演算法

七大排序分類 插入排序 直接插入排序 穩定 希爾排序 不穩定 選擇排序 簡單選擇排序 穩定 堆排序 不穩定 交換排序 氣泡排序 穩定 快速排序 不穩定 歸併排序。直接插入排序 時間複雜度 o n 2 演算法穩定性 穩定void straightinsertsort int a,int n 氣泡排序 ...

七大排序演算法

首先回顧下各種排序的主要思路 一 氣泡排序 氣泡排序主要思路是 通過交換使相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就 沉 到最後面了。重複n次即可以使陣列有序。氣泡排序改進1 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...