C語(yǔ)言不完全復(fù)習(xí)手冊(cè)之快速排序
咱就是說(shuō)?上online judge做航C復(fù)習(xí)題和前面的上機(jī)題啥的,看見(jiàn)排序的題咱只會(huì)qsort,咣咣咣都給他寫出來(lái).冒泡排序和選擇排序不會(huì)沒(méi)關(guān)系!自從cbj會(huì)qsort以后再也沒(méi)用過(guò)冒泡排序和選擇排序啥的了.
為什么qsort可以應(yīng)對(duì)幾乎所有的排序?
因?yàn)樗?時(shí)間復(fù)雜度比冒泡排序和選擇排序更優(yōu),處理相同數(shù)量的未排序數(shù)據(jù)他更快.
因?yàn)樗ㄓ?你可以把排序的問(wèn)題轉(zhuǎn)換成如何比較兩個(gè)數(shù)組元素大小的問(wèn)題,不用care排序的細(xì)節(jié),像手寫冒泡排序啥的你還要考慮交換的寫法什么的.
ok下面說(shuō)下qsort怎么用
zhei圖是MSVC里面的qsort:

大概長(zhǎng)這樣,如果看不明白這是啥沒(méi)關(guān)系!
縣長(zhǎng):師爺,來(lái)翻譯翻譯什么叫qsort

第一個(gè)參數(shù) base 一個(gè)指針,指向沒(méi)排序的數(shù)組
第二個(gè)參數(shù) num base指向的那個(gè)數(shù)組里面有多少個(gè)元素要排序
第三個(gè)參數(shù) size 每個(gè)元素占多少存儲(chǔ)空間,不用自己寫,你用sizeof取一下就完事了
第四個(gè)參數(shù) comparefunction 他是個(gè)函數(shù)指針,指向一個(gè)比較函數(shù)(告訴qsort怎么定義兩個(gè)元素誰(shuí)大誰(shuí)小)
驚喜就是你會(huì)了這個(gè)后面再也不怕排序了.
比較函數(shù)能且僅能長(zhǎng)成這個(gè)樣子
int functionname(const void *p,const void *q);
返回int型,如果小于0表示指針p指向的元素要排在q指向元素的前面,大于0表示指針p指向的元素要排在q指向元素的后面
舉個(gè)例子比如說(shuō)對(duì)一堆整數(shù)排序,大的在后面,小的在前面.
或者是這樣,比較double型大小,大的在后面,小的在前面.
哪怕比較的規(guī)則很奇怪也沒(méi)關(guān)系

咱照樣能寫出來(lái)(注意m是個(gè)全局的long long變量,開(kāi)在函數(shù)外面)
字符串的題目也能做

你對(duì)char排序不就ok了嗎?
對(duì)結(jié)構(gòu)排序也沒(méi)問(wèn)題

就照題目要求說(shuō)的做就ok了
會(huì)寫compare函數(shù)了,怎么調(diào)用還用我介紹嗎?
來(lái)吧,上例子.

