排序演算法目錄
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,直到找到已排序的元素小於或者等於新元素的位置 將新元素插入到該位...