快速排序大體思路:快排就是通過(guò)一趟排序?qū)⒃瓟?shù)據(jù)分成兩部分,其中一部分關(guān)鍵字都比另一部分小,接下來(lái)再對(duì)這兩部分分別使用快速排序,這里有遞歸的思想。如下圖:
第一輪排序完成以后,把數(shù)組視為以index為準(zhǔn)即小于index和大于index的兩組無(wú)序的元素,然后繼續(xù)按照上面的方式,把兩邊無(wú)序的元素進(jìn)行排序,直到排序完成。上代碼:
適用場(chǎng)景:
?????????快速排序之所比較快,因?yàn)橄啾让芭菖判?,每次交換是跳躍式的。每次排序的時(shí)候設(shè)置一個(gè)基準(zhǔn)點(diǎn),將小于等于基準(zhǔn)點(diǎn)的數(shù)全部放到基準(zhǔn)點(diǎn)的左邊,將大于等于基準(zhǔn)點(diǎn)的數(shù)全部放到基準(zhǔn)點(diǎn)的右邊。這樣在每次交換的時(shí)候就不會(huì)像冒泡排序一樣每次只能在相鄰的數(shù)之間進(jìn)行交換,交換的距離就大的多了。因此總的比較和交換次數(shù)就少了,速度自然就提高了。當(dāng)然在最壞的情況下,仍可能是相鄰的兩個(gè)數(shù)進(jìn)行了交換??焖云溥m用于數(shù)據(jù)量大的情況,但是快速排序?qū)崿F(xiàn)需要很多次對(duì)數(shù)據(jù)位置的操作,這里想一下如果排序之前數(shù)據(jù)是鏈?zhǔn)酱鎯?chǔ)的會(huì)怎么樣?還記得本系列文章開始講解數(shù)組,鏈表的區(qū)別嗎?這里,如果鏈?zhǔn)酱鎯?chǔ)頻繁對(duì)位置操作效率會(huì)下降很多,有大量重復(fù)數(shù)據(jù)的時(shí)候,性能同樣不好,也就是說(shuō)快速排序適用于數(shù)據(jù)量大重復(fù)數(shù)據(jù)少數(shù)據(jù)是順序存儲(chǔ)結(jié)構(gòu)的情況,不適用與鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。