經典演算法大總結之排序演算法

2021-06-08 14:00:56 字數 3339 閱讀 5322

從本章開始,我們將總結常用的排序演算法
這裡有乙個很好的博文

一,插入排序,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 不...