排序算法一直是c語言重點(diǎn)窄绒,各個(gè)算法適應(yīng)不用的環(huán)境,同時(shí)崔兴,在面試時(shí)彰导,排序算法也是經(jīng)常被問到的。今天我們介紹下快速排序敲茄,簡(jiǎn)稱就是快排位谋。
1.快速排序思想:
快排使用?分治法?(Divide and conquer)策略,將一個(gè)序列分為兩個(gè)子序列堰燎。(快排算法中使用到了遞歸掏父,對(duì)遞歸不太熟的,可以參考我前一篇文章)秆剪。具體步驟如下:
① 從數(shù)列中挑出一個(gè)元素赊淑,稱為"基準(zhǔn)"(Pivot)爵政;
② 重新排序數(shù)列,所有元素比基準(zhǔn)小的擺放在最前面陶缺,所有元素比基準(zhǔn)值大的放在基準(zhǔn)的后面(相同的數(shù)可以放在任意一邊)钾挟。在這個(gè)分區(qū)結(jié)束之后,該基準(zhǔn)就處于數(shù)列的中間位置饱岸。如上操作便稱為"分區(qū)(Partition)"操作掺出。
③ 遞歸的把小于基準(zhǔn)值元素的子數(shù)列和大于基準(zhǔn)值的子數(shù)列排序。
2.快速排序注意點(diǎn):
①遞歸的最底部情形苫费,是數(shù)列的大小是0或1汤锨,也就是永遠(yuǎn)都已經(jīng)被排序好了。
②雖然一直會(huì)遞歸百框,但是不用擔(dān)心闲礼,這個(gè)算法總會(huì)結(jié)束。畢竟在每次迭代中琅翻,至少會(huì)把一個(gè)元素?cái)[到它最后的位置去位仁。
③?快排時(shí)間復(fù)雜度為:O(nLog n);
3.快速排序代碼實(shí)現(xiàn):
① 數(shù)據(jù)結(jié)構(gòu)部分:
② 快速排序遞歸部分:
③尋找"基準(zhǔn)"部分:
④ main函數(shù)調(diào)用:
如果你也想學(xué)計(jì)算機(jī)編程的話!
可以來我的C語言/C++編程學(xué)習(xí)基地方椎,【點(diǎn)擊進(jìn)入】聂抢!
還有免費(fèi)(零基礎(chǔ)教程,項(xiàng)目實(shí)戰(zhàn)教學(xué)視頻)棠众!? ?
涉及:游戲開發(fā)琳疏、課程設(shè)計(jì)、常用軟件開發(fā)闸拿、編程基礎(chǔ)知識(shí)空盼、黑客等等...
和志同道合的小伙伴們一起學(xué)編程吧!
4.代碼實(shí)現(xiàn)結(jié)果:
每天進(jìn)步一點(diǎn)點(diǎn)新荤,每天消化一點(diǎn)點(diǎn)揽趾。如果你有更好的想法,歡迎一起交流苛骨。如果文章對(duì)你有所幫助篱瞎,點(diǎn)個(gè)贊唄。