快速記法
交換排序:
氣泡排序
快速排序
插入排序:
直接插入排序
希爾排序
選擇排序:
直接選擇排序
堆排序
歸併排序:
歸併排序
總結分析
排序方法
平均情況
最好情況
最差情況
輔助空間
穩定性氣泡排序
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 在某次遍歷中如果沒有資料交換,說明整個陣列已經有序。因此通過設定標誌位來記錄此次遍歷有無資料交換就可以判斷...