快速排序(C語言)

2021-09-22 19:51:53 字數 992 閱讀 4552

快速排序使用分治的思想:將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合為原問題的解。

陣列:

20 40 50 10 60

第一步:首先我們從陣列的left位置取出該數(20)作為基準(temp)參照物。

第二步:從陣列的最右邊的位置向前找,一直找到比 temp 小的數,如果找到,將此數賦給left位置(也就是將10賦給20),

此時陣列為:10,40,50,10,60,

left和right指標分別為前後的10。

第三步:從陣列的left位置向後找,一直找到比(base)大的數;

如果找到,將此數賦給right的位置(也就是40賦給10);

此時陣列為:10,40,50,40,60,

left和right指標分別為前後的40。

第四步:重複「第二,第三「步驟,直到left和right指標重合,

最後將(base)插入到40的位置,

此時陣列值為: 10,20,50,40,60,至此完成一次排序。

第五步:此時20已經潛入到陣列的內部,20的左側一組數都比20小,20的右側作為一組數都比20大;

以20為切入點對左右兩邊數按照"第一,第二,第三,第四"步驟進行
**如下:

void quick_sort(int a,int left, int right)

while (i!=j)

//i = j的時候,將 temp 填入中間位置 基數歸位

a[i] = temp;

// 遞迴呼叫 基數左邊

quick_sort(a, left, i-1);

// 遞迴呼叫 基數右邊

quick_sort(a, i+1, right);

}

快速排序C語言

就感覺,自己對這些個排序.至少,腦袋裡還沒有.哎,我老是不專心呢.加油吧.說說快速排序吧.這東西,原理就是不斷地將乙個陣列分成3部分.保持所有陣列處在這種狀態,最終完成排序.這些思想,還沒有掌握.加油吧,我還能說什麼?說些這個,呵呵.這段 起初不懂.後來,隨著不斷手工模擬,發現,採用了很多技巧.也難...

C語言 快速排序

1.快排是對氣泡排序的一種改進,在快速排序中,元素的比較和移動是從兩端向中間進行的,關鍵碼較大的元素一次就能從前面移動到後面,關鍵碼較小的元素一次就能從後面移動到前面,元素移動距離的較遠,從而減少了總的比較次數和移動次數 2.快速排序是基於分治法設計的,其分治策略是 劃分 選定乙個元素作為軸值,以軸...

快速排序 C語言

快速排序 基本思想是 1.分解 分為比基準元素小的 基準元素 比基準元素大的 三部分 2.遞迴求解 3.合併 include include define n 1000 define max 100 int a n void swap int i,int j int patition int p,i...