演算法導論 讀書筆記 排序演算法總結

2021-09-18 06:51:51 字數 1127 閱讀 7876

排序演算法目錄

1.插入排序

2.歸併排序

3.堆排序

4.快速排序

5.計數排序

6.基數排序

7.桶排序

一.插入排序

1.第乙個元素認為已經排好序了

2.從第二個元素開始考慮,考慮第j個元素

3.從後往前比較,前面數大於第j個元素,則往後挪乙個位置

4.挪到數小於第j個元素,或者挪完,此時因為數往後移了,故當前位置有乙個空位,插入第j個元素

5.反覆2-4

#include#includeusing namespace std;

void insert_sort(int a,int n)

}void build_max_heap(int a,int size)

}void heap_sort(int a,int size)

}int main();

heap_sort(a,10);

for(int i=0;i!=10;++i){

cout《建立堆的時間複雜度:o(n)(計算很複雜)

維護最大堆性質的時間複雜度:o(lgn)

堆排序的時間複雜度:o(nlgn),因為n-1次呼叫了max_heapify

堆排序不具有原址性和穩定性

四. 快速排序

1. 選擇乙個陣列的元素作為基準,一般選首或尾

2. 將陣列的其他元素逐一地跟這個基準作比較,比它小的放左邊,比它大的放右邊

3. 把這個元素與中間的元素交換,若為尾則與中間比它大的交換,若為首則與中間比它小的交換

4. 遞迴地分別對這個基準左邊的陣列和右邊的陣列作1-3

#include#includeusing namespace std;

int partition(int a,int p,int r){

int i=p-1;

int x=a[r];

int tmp;

for(int j=p;jpartition的時間複雜度:o(n)

快速排序的時間複雜度:最壞情況下,如果每次劃分都不平衡,為o(n^2);最好的情況下為o(nlgn);平均情況下,或者說期望執行時間也為o(nlgn)。

快速排序性質:原址性,穩定性

五. 計數排序

《演算法導論》讀書筆記 快速排序

快速排序是最壞情況時間複雜度為o n 最優時間複雜度為o nlgn 平均時間複雜度為o nlgn 最壞情況出現在每一層劃分子問題時,分別包含了n 1個元素和0個元素,此時的時間複雜度為o n 與插入排序相同 在陣列已經有序時其時間複雜度依舊為o n 此時插入排序的時間複雜度為o n 快速排序使用了分...

讀書筆記 演算法導論

第2章演算法入門 浮於表面不如深入其中,送給自己,自己是最大的敵人,那麼就盡最大努力去克服自己,沉思,冷靜,不浮躁!勘誤 在演算法導論第9頁,扼要的扼 內容提要 1 偽 的表示方法 2 插入排序演算法分析 3 迴圈不變式 4 演算法設計之分治法 divide and conquer 5 合併排序演算...

演算法導論讀書筆記 插入排序

一般來說,插入排序都採用in place在陣列上實現。具體演算法描述如下 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,在已經排序的元素序列中從後向前掃瞄 如果該元素 已排序 大於新元素,將該元素移到下一位置 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置 將新元素插入到該位...