尊重原創,原文鏈結
今天看到大神寫的一篇快速排序的部落格,肅然起敬,覺得原來快速排序這麼簡單
下面進行簡單的試試
快速排序的基本思想是
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類...
秒殺程式基本思路
做秒殺活動的時候,最難應付的應該是在開始秒殺的那一瞬間,如何解決成千上萬個使用者同時造成的高併發問題。只有較好地解決這些問題,才能讓你的程式 在這麼多秒殺使用者中,找到真正的秒殺得主。雖然之前做的秒殺活動最多的併發數也就在幾十個,不過,還是積累了一些經驗,在此記錄並分享出來,希望對其他開 發秒殺產品...