演算法之快速排序

2021-08-25 02:50:32 字數 1978 閱讀 7277

最近重溫了一下快速排序,我覺得果然重複就是力量,自己越來越懂了,所以我要好好總結一下,如果不總結,我的腦子就算懂了還是凌亂的。

總結按照舉例並逐步分析,原理,總結的順序來的。

下面我就來以實戰論英雄;

待排序的陣列為:

快速排序就像是有兩個小孩子,乙個在最左邊,乙個在最右邊,對沒錯,就是那種,我住長江頭君住長江尾的感覺。讓我們看看他們的最開始的家,是的,沒錯,

那要怎麼才能完成排序呢?首先,我要按照公升序排,從小到大來排的

第一步,把第乙個數作為基準點,即5,把它作為標準,排序的過程就是不停地找基準點所在的位置的過程。

現在基準點5所在的是第乙個位置,但是要靠它分出來兩股資料,一邊都比它小,一邊都比它大,所以我們要怎麼做呢?

找j小於基準數5的,i找到比基準數大的。

首先,一定要從j開始走,23比5大,所以往前走,直到它找到比5小的數字

那麼不停的從最右往左找,就發現,0要比5小,所以就停下來,不動了。這次開始i動了,i要從左往右找,找到比基準數5大的,那麼一直找就發現,7比基準數5大,就停在了7的位置(如上圖)

這是,第一次交換資料,i和j交換,那麼交換後的資料為

現在,基準點的準確位置還沒有找到,所以繼續前行,還是先讓j繼續找比基準點5小的,發現1比5小,那麼停在1的位置不懂,接著,i開始往右走,發現9比5大,同樣符合要求,那麼,再一次雙方交換資料,其結果為:

那麼現在,作為基準點,還是不能很好的將整個陣列劃分為兩股勢力,一方都比基準點小,一方都比基準點大,所以,j要繼續往左走,走到8,8>5,不能停,那麼繼續走就到了i所在的1,1<5,所以應該停下來,那麼i,j相遇的地方,就是基準點5應該在的地方,所以,交換資料8,和資料5的位置,則有以下結果:

那麼,第一輪排序到這裡就算是完成了。

第二輪排序怎麼開始呢?

既然我們找到了基準點,將乙個大的陣列成功分成了兩股勢力,左邊都是比5小的,右邊都是比5大的,那麼就在這兩個分割槽裡面繼續重複第一輪的操作

一部排序方式

還是老方法,把為首的1作為基準點,找到其合適的位置,i,j位置也如之前,j要小於1,i>1

開頭還是j先走,發現0小於基準點1,那麼停下不動,i走,發現3大於1,交換位置:

還沒有找到基準點的正確位置,繼續找,j向左走,發現2>1,不能停,繼續走,發現0大於1,那麼停下來發現i,j再次相遇,既然相遇,這個位置就是基準點所在位置了,交換0,1

於是一部的順序排好了:

二部的排序同樣也是如此,因此最終的排序結果是這樣的:

那麼逐步分解就到這裡了

總結:慢慢學習,再笨也會有聰明的時候

ps:**過後補充吧

演算法 排序演算法之快速排序

很受打擊啊啊啊啊啊!這道排序題我很久之前就做過,而且當時沒用20分鐘就搞定了,可是,今天在公司做完手上的活之後打算刷題時,又心血來潮的想重做一遍,心想反正也花不了多少時間,結果。血崩了。要求 對於乙個int陣列,請編寫乙個快速排序演算法,對陣列元素排序。給定乙個int陣列a及陣列的大小n,請返回排序...

演算法 排序演算法之快速排序

快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 nlogn 次比較。在最壞狀況下則需要 n2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 nlogn 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地被實現出來。快速排序...

排序演算法之快速排序

快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽退出...