快速排序的思想其實比較好理解,但是實際碼**的時候,會遇到一些問題,並不是想象的那麼簡單。
在網上看了一下,感覺大多數的部落格介紹其排序原理的時候說得很生動形象,但給出的實現**其實邏輯說得不是很清晰,甚至是錯誤的。
這裡我自己寫了一下快速排序,過程中也遇到了一些問題,但總算是解決了。這裡給出來,並詳細說一下其邏輯。
(1) quick.h 標頭檔案
#pragma once
#include
"stdafx.h"
using namespace std;
class quick
;
(2) quick.cpp 具體實現#include
"stdafx.h"
#include
"quick.h"
using namespace std;
quick:
:quick
(vector<
int> a):v
(a)void quick:
:sort()
void quick:
:sort
(int lo,
int hi)
int quick:
:position
(int lo,
int hi)
return j;
}void quick:
:exch
(int i,
int j)
void quick:
:show()
cout << endl;
}
(3)注釋說明
具體的實現只需要看 void quick::sort(int lo, int hi); int quick::position(int lo, int hi);兩個函式。
sort(int lo, int hi) 遞迴,position()用來找到基數的合適位置。
exch(int i, int j)函式很簡單,就是交換i,j處的元素。
詳細說明position()函式。
i和j的起始位置需要注意一下,因為要配個後面的 ++i和 --j 的操作
在while(1)迴圈中,先左移j,注意的是遞減是在while條件判斷裡的;
在基數右側的所有數,有3種情況,見**注釋。
這裡一定要想清楚 i 和 j 可能的位置關係。
專案實踐經驗總結 (1)
media screen and min width 768px media screen and min width 992px media screen and min width 1200 注意下順序,如果你把 media min width 768px 寫在了下面那麼很悲劇,media sc...
kafka相關實踐 經驗總結
kafka快的原因 1 partition順序讀寫,會先寫入頁快取,再寫入磁碟,充分利用磁碟特性,這是基礎 2 producer生產的資料持久化到broker,採用mmap檔案對映,實現順序的快速寫入 3 頁快取技術在讀取時可以實現零拷貝,減少io,加快socket傳輸速度 4 customer從b...
WTL實踐經驗總結 不斷更新
一.wtl的使用 二.wtl的結構 三.wtl的剖析 四.wtl的資源 五.wtl的專案 我自己寫的哦 選擇wtl很大部分原因都是因為對模板的迷戀,不知為啥,c 的魅力盡然在模板!好,開始我們的征程吧。一 wtl的使用 1.安裝 網上已經很多這樣的文章了,看這裡,這裡 2.幫助外掛程式 visual...