從這裡開始就是真正的考驗了。
這個廠子全是工業大戶的訂單,他們非常狂躁,因此需要較快的時間出貨,而且為了壓縮成本,你也不能買太多的桶。
勇者將剛才寫的所有魔法**全部試了一下,發現全部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 任取待排序記錄序列中的某個記錄 例如取第乙個記錄 作為基準 樞 按照該記錄的關鍵字大小,將整個記錄序列劃分為左右兩個子...