快速排序 從理解到掌握

2021-08-13 06:14:45 字數 1379 閱讀 8725

首先我們先來看下快速排序演算法的原理:

從陣列中取得乙個「標誌數字」(沒有要求,可以隨便取,一般取第乙個);定義兩個位置變數 「i」 ,「j」 ;「i」 左邊找大於等於「標誌數字」的數 ,「i」從右邊找小於等於「標誌數字」的數;找到後兩者交換位置 

直到以該數字為標誌, 實現該數字的左邊都是小於等於該數字的數,右邊都是大於等於該數字的數

然後對該標誌位左邊和右邊的部分陣列分別指向上面兩步

例如: 1,2,3,5,0,1

取的數字 1 為「標誌數字」 任意取 那個都行 一般預設陣列第乙個數字

第 一 次尋找 兩邊的1 相互交換位置 注意 這時的「標誌數字」是後乙個1 

【結果】 1 2 3 5 0 1; 

第 二 次【這時i++了一次j--了一次】尋找第乙個小於等於的「標誌數字」的值為(0) 大於等於的為(2) 交換位置

【結果】 1 0 3 5 2 1; 

這是i j已將相遇 (i>=j)

在相遇位置 數字3 左邊都是小於等於「標誌數字」的 右邊都是大於等於「標誌數字」的

將陣列分為 1 0 - 3 5 2 1兩個子陣列遞迴呼叫

取的數字 1 為「標誌數字」

尋找左開始尋找大於等於1的找到(1) 又開始尋找小於等於1的找到(0)

【結果】 0 1 - 3 5 2 1

取標「標誌數字」3 

找到3 1交換位置

【結果】 0 1 - 1 5 2 3

找到5 2交換位置

【結果】 0 1 - 1 2 5 3

遞迴排序1 2  -5 3

...標誌數字 5

找到5 3交換位置 

【結果】 0 1 - 1 2 - 3 5

直到最後每個子陣列的成員只有乙個 排序完成

static void quicksort(int num, int l=0, int r=0)

,j=,sign=,時和交換;", i,j, sign,num[j], num[i]);

從入門到實踐,快速掌握 Nginx 研發

對於開發來說,我們在工作中或多或少都會遇到 web 效能優化 高併發等問題,而 nginx 是乙個萬能藥,它具備高效能 高擴充套件性 高可靠性 低記憶體消耗等優勢,不管是個人建立 部落格,還是進行網際網路應用開發,都可以輕鬆應對。實驗樓上線了一門 nginx 網路模組編寫入門 課程,或許可以幫助到有...

重點掌握 快速排序

快速排序是氣泡排序的改進版,也是最好的一種內排序,在很多面試題中都會出現,也是作為程式設計師必須掌握的一種排序方法。思想 1.在待排序的元素任取乙個元素作為基準 通常選第乙個元素,但最的選擇方法是從待排序元素中隨機選取乙個作為基準 稱為基準元素 2.將待排序的元素進行分割槽,比基準元素大的元素放在它...

ZMQ從入門到掌握二

原始碼走讀 1.zmq ctx new 返回ctx t物件 void zmq ctx new void create 0mq context.zmq ctx t ctx new std nothrow zmq ctx t if ctx return ctx 函式返回context 上下文 其實呼叫的...