「挖坑填坑」理解快速排序

2021-08-08 14:35:35 字數 1443 閱讀 1900

快速排序的基本思路:找乙個基準元素,對陣列進行調整,調整的標準是,這個基準元素的左邊存放的都是比這個元素小的,右邊都是比這個元素大的。然後分而治之,對左右兩邊的子陣列利用同樣的規則調整,調整到每乙個子陣列中都只有乙個元素時結束。

基本思想很簡單,主要是理解如何在確定基準元素之後,對陣列(子陣列)進行調整,下面舉個例子,用「挖坑填坑」(拆了東牆補西牆)的比喻來理解一次調整的過程。

乙個無序陣列:[4, 3, 7, 5, 10, 9, 1, 6, 8, 2]

1.      隨便先挖個坑,就在第乙個元素(基準元素)挖坑,挖出來的「蘿蔔」(第乙個元素4)在「籃子」(臨時變數)裡備用。挖完之後的陣列是這樣:[, 3, 7, 5, 10, 9, 1, 6, 8,2]

2.      挖右坑填左坑:從右邊開始,找個比「蘿蔔」(元素4)小的元素,挖出來,填到前乙個坑裡面。填坑之後:[ 2, 3, 7, 5, 10, 9, 1, 6, 8,]

3.      挖左坑填右坑:從左邊開始,找個比「蘿蔔」(元素4)大的元素,挖出來,填到右邊的坑裡面。填坑之後:[ 2, 3,, 5, 10, 9, 1, 6, 8, 7]

4.      挖右坑填左坑:從右邊開始,找個比「蘿蔔」(元素4)小的元素,挖出來,填到前乙個坑裡面填坑之後:[ 2, 3, 1, 5, 10, 9,, 6, 8, 7]

5.      挖左坑填右坑:從左邊開始,找個比「蘿蔔」(元素4)大的元素,挖出來,填到右邊的坑裡面填坑之後:[ 2, 3, 1,, 10, 9, 5, 6, 8, 7]

6.      挖右坑填左坑:從右邊開始,找個比「蘿蔔」(元素4)小的元素,挖出來,填到前乙個坑裡面,這一次找坑的過程中,找到了上一次挖的坑了,說明可以停了,用籃子裡的的蘿蔔,把這個坑填了就行了,並且返回這個坑的位置,作為分而治之的中軸線。填坑之後:[ 2, 3, 1,4, 10, 9, 5, 6, 8, 7]

上面的步驟中,第2,4, 6其實都是一樣的操作,3和5的操作也是一樣的。

**如下:

int _qucikly_sort(int arr, int low, int high) 

}

測試**:

#include #include void display(int arr, int len) 

int main() ;

quickly_sort(arr, 0, sizeof(arr)/sizeof(int) - 1);

display(arr, sizeof(arr)/sizeof(int));

return 0;

}

快速排序(挖坑理解)

快速排序第一次弄懂 由學姐講的我個人覺得不錯的一種理解方法 挖坑填空 舉例6,3,2,8,9,5,4,7,1,10 給予變數l r代表所排範圍 開始第一步選出乙個標誌量key用來作為標誌量 為方便取key a l 然後挖坑 用0代替挖坑 變為0,3,2,8,9,5,4,7,1,10 1.然後從r出發...

快速排序 挖坑填數 分治法

快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 ...

快速排序(Quick Sort) 挖坑填數法

前面的博文講了氣泡排序 選擇排序 插入排序,今天我們談談快速排序!快速排序的基本思想是 1 先從序列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。分割槽的方式多樣,但一定要保證基準數左邊的數比它大 小 右邊的數比它小 大 3 再對左右區間重複...