排序是演算法中的經典,自計算機誕生後有n多個奇奇怪怪的排序演算法被提出來。下面是常見的排序演算法:
氣泡排序
選擇排序
插入排序
希爾排序
歸併排序
快速排序
基數排序
堆排序計數排序
桶排序
…排序演算法可以根據需要選擇,也可以使用有序容器(比如set)。目前來看,快速排序是排序演算法中平均用時最少的,較穩定,空間複雜度也很低。
不斷將待排序序列分成2塊,其中一塊中的元素都比另一塊中的小。這樣不斷劃分,一般採用遞迴實現。
標準庫sort函式採用快速排序,經過優化規避了極端情況。
#include
//演算法
std::
sort
(array, array+size)
;//預設公升序
std::
sort
(first, last, cmp)
;//cmp可以是返回bool的函式或lambda表示式(c++11)
逐次將相鄰兩數比較,如果前數比後數大(小)就交換。一輪交換後最後乙個數就是最大(小)的,再重複處理剩餘項。
void
sort1
(int num,
int n)
if(mode)
break;//
mode =
true
;--n;
}}
將所有數打擂台式比較,一輪後取出最大(小)的放在前面,再將剩餘資料重複打擂台。這是最慢的排序演算法了。
void
sort3
(int num,
int n)
}}
直接插入排序的原理就是從第一項開始作為有序部分,然後迴圈將當前項與前面所有有序項進行比較,插入到有序序列中,直到最後所有資料都是有序序列。
void
sort2
(int num,
int n)
}
雜湊表(hash table)將num標記在array[num]處,以空間換時間,可以實現排序和去重。可以使用std模板類 unordered_map
1 (c++11)。
手工雜湊表排序、去重(未優化):
int
hash_sort_sole
(unsigned
*first,
unsigned
*last)
return l;
}
unordered_map是hash_map的替代名稱。從c++11開始,hash_map 實現被新增到標準庫中。但為了防止與已開發的**存在衝突,決定使用替代名稱 unordered_map。這個名字暗示了該類元素的無序性。 ↩︎ C 排序演算法小結
1 計數排序 如果給定上下界,並且區間不大的話,最適用。比如對於英文本母陣列進行排序。時間複雜度o n 空間複雜度o n void countsort int a,int n,int low,int high int ind 0 for int i 0 i size i 2 氣泡排序 基礎版 最基礎...
C 排序演算法小結
前言 演算法這個東西其實在開發中很少用到,特別是web開發中,但是演算法也很重要,因為任何的程式,任何的軟體,都是由很多的演算法和資料結構組成的。但是這不意味著演算法對於每個軟體設計人員的實際工作都是很重要的。每個專案特點和需求特殊也導致演算法運用場景上不同。但是個人覺得演算法運用的好的話會給自己在...
排序演算法小結 C 實現
include include 排序演算法的穩定性 對於相同的關鍵字,排序之前的位置和排序之後的位置相同,則稱為穩定排序,否則不穩定排序。歸併排序 基本思想為 先分解再合併,在合併的過程中進行排序 穩定排序 平均時間複雜度為 o nlogn 最好時間複雜度o nlogn 最好時間複雜度o nlogn...