從本章開始,我們將總結常用的排序演算法
這裡有乙個很好的博文
一,插入排序,o(n2)
#includeusing namespace std;
void insertionsort(int* a,int len)
a[i+1] = key;
}};void main();
insertionsort(a,6);
for(int i = 0;i<6;i++)
cout<二,歸併排序(c++),o(nlgn)
#include#includeusing namespace std;
void merge(int* a,int p,int q,int r)
}//建堆
void buidmaxheap(vector&a)
//堆排序
void heapsort(vector&a)
}void main();
vectora(a,a+10);
for(int i = 0; i三,快速排序(c++),o(nlgn)
下面將介紹四種快熟排序的方法:
/*第一種是最初始的快排:hoare快排*/
#include#includeusing namespace std;
int kp[10] = ;
const int size = 8; void print()
puts("");
} //一趟快排之後,以樞紐為分隔,左邊的<=樞紐, 右邊的》=樞紐
int partition(int kp, int low, int high)
return low;
}//partition
void qsort(int kp, int low, int high)
}//qsort
int main()
第二種:/*演算法導論裡優化後的快排(n.lomuto優化)
假如進行一次快排partition,執行時間為n + x
這裡的x為額外的比較或乙個時間單元的累加
下邊的演算法相對於hoare快排, 減少了比較所耗的時間
,但是比較次數實際上也是視情況而比較
但總體上,這個優化版本效率上有提公升*/
#include #include #include using namespace std;
int partition(vector&a,int p,int r)
void randomized_quicksort(vector&a,int p,int r)
上面我們已經介紹了幾種能在o(nlgn)時間內排序n個數的演算法。合併排序和堆排序在最壞情況下都能達到此上界,快速排序在平均情況下達到此上界,下面我們將討論三種線性時間執行的演算法:計數排序,基數排序和堆排序。三,計數排序:元素必須是大於等於0,同時不能太大,否則陣列res會暴棧
特點是:非常穩定
計數排序的基本思想就是對每乙個輸入元素x,確定出小於x的元素個數。有了這一資訊,就可以把x直接放到它的最終輸出陣列中的位置上。當以幾個元素相同時,這個方案要略作修改,因為不能把它們放在同乙個輸出位置上。
執行時間為:o(n)
#include #include using namespace std;
vectorcounting_sort(vectora,int k);
int tmp[10];
int count[10];
int maxbit(int data,int n)
return d;
}void radixsort(int data,int n)
for(int j=0;j五、桶排序
桶排序的思想就是把區間
[0,1)
劃分為n
個相同大小的子區間,或稱桶。然後,將
n個輸入數分布到各個桶中去。為得到結果,先對各個桶中的數進行排序,然後按次序把各桶中的元素列出來即可。
1.#include2.#include3.
4.typedef struct nodekeynode;
8.
9.void inc_sort(int keys,int size,int bucket_size)
16. for(int j=0;jkey=keys[j];
19. node->next=null;
20. //對映函式計算桶號
21. int index=keys[j]/10;
22. //初始化p成為桶中資料鏈表的頭指標
23. keynode *p=bucket_table[index];
24. //該桶中還沒有資料
25. if(p->key==0)else
36. }
37. //列印結果
38. for(int b=0;bnext; k!=null; k=k->next)
40. cout
41. cout<六 各種排序演算法的比較:
排序穩定性的一點知識:
1)穩定的:如果存在多個具有相同排序碼的記錄,經過排序後,這些記錄的相對次序仍然保持不變,則這種排序演算法稱為穩定的。
插入排序、氣泡排序、歸併排序、分配排序(桶式、基數)都是穩定的排序演算法。
2)不穩定的:否則稱為不穩定的。
直接選擇排序、堆排序、shell排序、快速排序都是不穩定的排序演算法。
乙個各種排序演算法演示**:
(看**就知道)
經典演算法 八大排序演算法總結
插入排序 特點 stable sort in place sort,最好o n 最壞o n 2 氣泡排序 特點 stable sort in place sort 思想 通過兩兩交換,像水中的泡泡一樣,小的先冒出來,大的後冒出來。快速排序 改進當所有元素相同時的效率的partition實現 堆排序 ...
經典排序演算法總結
排序演算法是離散數學和資料結構學科最基本的演算法,雖然知道這些排序演算法的名字,但是一直沒有研究過它們的實現原理。現在把它們收集起來,並一一親自實現,來加深對排序演算法的理解。1,氣泡排序 最簡單的排序演算法,從第乙個元素開始比較相鄰元素大小,如果前邊元素大於後邊元素則交換位置,否則將下標移到下乙個...
經典排序演算法總結
插入排序 選擇排序 歸併排序 排序方法 平均情況 最好最差 空間複雜度 穩定性氣泡排序o n2 o n 2 o n o n o n2 o n 2 o 1 o 1 穩定快速排序o nlogn o nlog n o nlogn o nlog n o n2 o n 2 o nlogn o nlog n 不...