快速排序實踐經驗總結 弄透其邏輯

2021-09-12 05:40:24 字數 1201 閱讀 2772

快速排序的思想其實比較好理解,但是實際碼**的時候,會遇到一些問題,並不是想象的那麼簡單。

在網上看了一下,感覺大多數的部落格介紹其排序原理的時候說得很生動形象,但給出的實現**其實邏輯說得不是很清晰,甚至是錯誤的。

這裡我自己寫了一下快速排序,過程中也遇到了一些問題,但總算是解決了。這裡給出來,並詳細說一下其邏輯。

(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...