排序演算法可以說是從語言步入演算法的第一道坎了,其中最有代表性的莫過於快排。這裡模擬庫函式自帶sort的呼叫方式,寫起來相當自然清爽。
樸素快速排序演算法的複雜度最好為o(nlogn),最壞時能達到o(n²)
#include#include#include#include#include#include#define for(i,x,y) for(int i=(x);i<=(y);i++)
#define dor(i,x,y) for(int i=(x);i>=(y);i--)
using namespace std;
bool cmp(int x,int y)
{ return x//定義乙個類模板
void quick_sort(t *a,t *b,bool compare(t,t)) //對[a,b)中的元素進行以compare為法則的排序
{ int m=b-a,k=rand()%m; //隨機優化
上面這個流程圖會使演算法清晰很多,其實快排可以簡單地歸結為四個字「挖坑填數」。
比如說樸素的快排,選取第乙個元素為標準,也就是說把第乙個元素「挖」了出來。然後從右端找到更小的數「填」進去,那麼右端也空了乙個坑。再從左邊繼續尋找……如此周而復始,直到左右指標重合,把第乙個挖出來的元素填上,然後以這個重合的位置把區間分成兩半進行遞迴……
然後這個隨機的快排也是一樣的道理,只不過它多了一步操作,隨機選取乙個元素作為標準,「挖」出來,再把第乙個元素填進去。
排序 快速排序模板
以某個記錄 元素 為界 該記錄稱為支點或樞軸 將待排序列分成兩部分 一部分 所有記錄的關鍵字大於等於支點記錄的關鍵字 另一部分 所有記錄的關鍵字小於支點記錄的關鍵字 演算法描述 1 任取待排序記錄序列中的某個記錄 例如取第乙個記錄 作為基準 樞 按照該記錄的關鍵字大小,將整個記錄序列劃分為左右兩個子...
快速排序 模板
說明 經過本函式處理後,陣列itemarray中元素滿足prulefunc itemarray itemr itemarray iteml 為true,其中itemr iteml template t void quicksort itemarray,int iteml,int itemr,bool...
快速排序 模板
小哼買書 標籤 字串 模擬排序 字串處理 詳情 小哼的學校要建立乙個圖書角,老師派小哼去找一些同學做調查,看看同學們都喜歡讀哪些書。小哼讓每個同學寫出乙個自己最想讀的書的isbn號 你知道嗎?每本書都有唯一的isbn號,不信話你去找本書翻到背面看看 當然有一些好書會有很多同學都喜歡,這樣就會收集到很...