模板 排序(三)

2021-07-31 21:51:41 字數 2030 閱讀 4664

從這裡開始就是真正的考驗了。

這個廠子全是工業大戶的訂單,他們非常狂躁,因此需要較快的時間出貨,而且為了壓縮成本,你也不能買太多的桶。

勇者將剛才寫的所有魔法**全部試了一下,發現全部tle,然而用桶排序的話會mle。

「……」勇者累得說不出話來。

「不要急躁嗎,其實我從照相館那裡借了點書過來,說不定就有你想要的哦!」

勇者翻開了書,上面寫了神奇的魔法。

快速排序,o(nlogn)

注:這個是從小到大排的……大(其)家(實)自(是)己(我)寫(懶)一(的)下(寫)從(了)大(而)到(已)小(啊)的(蛤)吧(蛤)!

#include

#include

#include

#include

#include

using

namespace

std;

int n,a[100001];

void qsort(int l,int r)

while(a[j]>mid)

if(i<=j)

}while(i<=j);

qsort(l,j);

qsort(i,r);

}}int main()

qsort(1,n);

for(int i=1;i<=n;i++)

return

0;}

快速排序採用了二分的想法,選取乙個基準點,保證前面的數字全部小於它。後面的數字全部大於它,指標乙個從前往後,乙個從後往前,遇到不符合上述標準的話(除非左指標在右指標右面了),就交換這兩個數,然後以交換的數為基準遞迴即可……」

勇者將上述**改了改,交了上去,然後ac了。

「然而,c++自帶乙個函式預設從小到大排序……」

#include

#include

#include

#include

#include

using

namespace

std;

int main()

sort(a+1,a+n+1);

for(int i=1;i<=n;i++)

return

0;}

「……」勇者石化中。

————————————

第四個廠子,客戶還是那些客戶,不過他們的要求有點怪異。

他們的要求不只是鋼材的長短,還有粗細。

以長短為第一關鍵字,粗細為第二關鍵字,從大到小排一下。

「雖然手寫快排可以完成這個……但是人家實在不想寫手寫怎麼辦!」勇者抱怨到。

「別著急,我們還有神奇的cmp呢!」

首先我們先用cmp解決一下如何實現從大到小排序吧!

bool cmp(int a,int b)
很容易理解吧。

那麼我們開始關鍵字排序的cmp吧。

這裡面為了方便sort排序於是用到了高深的結構體

struct haa[100];

bool cmp(ha a,ha b)

「可是這些**我都看得懂,」勇者說,「但是怎麼用啊?」

「那這就太簡單了。」

#include

#include

#include

#include

#include

using

namespace

std;

struct haa[100];

bool cmp(ha a,ha b)

int main()

sort(a+1,a+n+1,cmp);

for(int i=1;i<=n;i++)

return

0;}

也就是說,只需要寫成sort(a+1,a+n+1,cmp)即可了!

「汗……原來這麼簡單。」勇者說,「行吧,我們到下乙個廠子!」

排序 快速排序 歸併排序模板 模板

正經人誰手寫這玩意?785.快速排序 本質 分治。是不穩定的排序演算法。時間複雜度 o n logn o nlogn o nlog n 空間複雜度 o l ogn o logn o logn 基於遞迴,用到棧空間 模板注意點 關於無限遞迴問題,大家動手模擬一遍樣例就能理解了。快排邊界問題很多,很煩 ...

排序 希爾排序模板

希爾排序又稱縮小增量排序 1 先取定乙個小於n的整數gap1作為第乙個增量,把整個序列分成gap1組。所有距離為gap1的倍數的元素放在同一組中,在各組內分別進行排序 分組內採用直接插入排序或其它基本方式的排序 一般gap1為n 2,一次往後類推 gap2 gap 2,若為奇數,則gap2 gap1...

排序 快速排序模板

以某個記錄 元素 為界 該記錄稱為支點或樞軸 將待排序列分成兩部分 一部分 所有記錄的關鍵字大於等於支點記錄的關鍵字 另一部分 所有記錄的關鍵字小於支點記錄的關鍵字 演算法描述 1 任取待排序記錄序列中的某個記錄 例如取第乙個記錄 作為基準 樞 按照該記錄的關鍵字大小,將整個記錄序列劃分為左右兩個子...