快速排序基本思路

2021-08-15 12:52:18 字數 1520 閱讀 5715

尊重原創,原文鏈結

今天看到大神寫的一篇快速排序的部落格,肅然起敬,覺得原來快速排序這麼簡單 

下面進行簡單的試試

快速排序的基本思想是

1、先從數列中取出乙個數作為基準數

2、分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊

3、再對左右區間重複第二步,直到各區間只有乙個數

概括來說為 挖坑填數+分治法

下面舉例來進行說明,主要有三個引數,i為區間的開始位址,j為區間的結束位址,x為當前的開始的值

第一步,i=0,j=9,x=2101

2345

6789

2132

4398

5445234

6686

第二步,從j開始由,後向前找,找到比x小的第乙個數a[7]=4,此時i=0,j=6,x=21 

進行替換01

2345

6789

4324398

5445

2321

6686

第三步,由前往後找,找到比x大的第乙個數a[1]=32,此時i=2,j=6,x=2101

2345

6789

4214398

5445

2332

6686

第四步,從j=6開始由,由後向前找,找到比x小的第乙個數a[0]=4,此時i=2,j=0,x=21,發現j<=i,所以第一回結束

可以發現21前面的數字都比21小,後面的數字都比21大 

接下來對兩個子區間[0,0]和[2,9]重複上面的操作即可

下面直接給出過程,就步詳細解說了

i=2,j=6,x=4301

2345

6789

4214398

5445

2332

6686

i=4,j=6,x=4301

2345

6789

4213298

5445

2343

6686

i=4,j=5,x=4301

2345

6789

4213243

5445

2398

6686

i=5,j=5,x=4301

2345

6789

4213223

4345

5498

6686

然後被分為了兩個子區間[2,3]和[5,9]

….最後排序下去就是最終的答案01

2345

6789

4212332

4345

5466

8698

總結:

1.i =l; j = r; 將基準數挖出形成第乙個坑a[i]。

2.j–由後向前找比它小的數,找到後挖出此數填前乙個坑a[i]中。

3.i++由前向後找比它大的數,找到後也挖出此數填到前乙個坑a[j]中。

堆排序基本思路

前提 1 不建立新的空間,只在當前帶排序陣列arr中做處理 2 公升序,大頂堆。思路 1 首先建立大頂堆。建立大頂堆的過程 heapinsert 是自下而上不斷調整新加入元素的位置 2 交換首次建立好大頂堆的首尾元素 最大元素沉底,這也是為什麼利用大頂堆做公升序 同時用於重建大頂堆的arr尺寸減1 ...

python unittest基本思路

unittest是python中的單元測試框架,但也可以作為selenium自動化測試框架。基本思路主要分為以下三步 1.設計測試用例,注意點主要是要包含測試類和測試方法 class unittest class unittest.testcase 必須包含unittest模組下的testcase類...

秒殺程式基本思路

做秒殺活動的時候,最難應付的應該是在開始秒殺的那一瞬間,如何解決成千上萬個使用者同時造成的高併發問題。只有較好地解決這些問題,才能讓你的程式 在這麼多秒殺使用者中,找到真正的秒殺得主。雖然之前做的秒殺活動最多的併發數也就在幾十個,不過,還是積累了一些經驗,在此記錄並分享出來,希望對其他開 發秒殺產品...