快速排序法

2021-07-29 23:13:10 字數 2359 閱讀 1834

快速排序法就是在數字裡面選擇乙個基準數,我們記為a,這個基準數一般選擇第乙個數字,這樣比較簡單。然後我們從這個數列的兩端開始探測,從右邊找到比基準數小的數,我們記為b,從左邊找到比基準數大的數字,記為c。但當他們探測還沒有遇到一起的時候,這此時交換b和c。如果他們探測撞到一塊,此時他們都指向同乙個數字,記為d, 這個時候,d左邊的所有數字都比a大,d右邊的所有數字都比a小。則此時我們將d和a互換。

現在開始第一次探測。從左開始探測,首先c發現1比3小,c便停下來,b開始探索,b發現7大於3,b停下了。

此時b,c互換。第一次探測結束,結果如下:

接下來繼續探測,c探測5時,5大於3,繼續向左探測,直到c探測到2比3小時,停止。b開始向右探測,發現4大於3,則b停止,b,c互換值。互換之後結果為:

c開始繼續向左探測,直到單側到2時,c停下來了。由於此時b和c撞到一塊,於是,和基準數互換。

互換後為,此時基數3已結歸位。接下來以2作為新的基準數。此時第一輪的探測就結束了。

快速排序法要用到遞迴,現在要分別對3的左邊和右邊進行排序,首先對3左邊的2和1進行排序。如下,然後跟前面的方法一樣。

2和1排序結束後,整體順序為:

現在我們要對3右邊的數字進行排序。這時是以9位基準數。

方法和前面一樣。c向左探測,發現7比9小,停止下來。b向右探測,尋找大於9的數字,直到b和c相遇,於是9和7交換。

根據遞迴,於是又對9左邊的數字7,4,5進行排序,方法和前面的2和1排序方法相同。

最終排序結果如下:

通過測試程式,我們可以看到每次遞迴後的排序順序。

#include#define n 10

int num[n];

int quick_sort(int l,int r)

while(num[left]<=base&&right>left)//尋找左邊大於base

//如果沒有相遇,這左右值交換

if(right>left)

for(i=1;i<=r;i++)

printf("%d\t",num[i]);

printf("\n");

} //當左右相遇,基數歸位

num[l]=num[right];

num[left]=base;

//num[r]=base;

quick_sort(l,left-1);

quick_sort(right+1,r);

} int main()

最後附上完整**:

#include#define n 10

int num[n];

int quick_sort(int l,int r)

while(num[left]<=base&&right>left)//尋找左邊大於base

//如果沒有相遇,這左右值交換

if(right>left)

} //當左右相遇,基數歸位

num[l]=num[right];

num[left]=base;

//num[r]=base;

quick_sort(l,left-1);

quick_sort(right+1,r);

} int main()

快速排序法

一 快速排序演算法的基本特性 時間複雜度 o n lgn 最壞 o n 2 空間複雜度 o n lgn 不穩定。快速排序是一種排序演算法,對包含n個數的輸入陣列,平均時間為o nlgn 最壞情況是o n 2 通常是用於排序的最佳選擇。因為,基於比較的排序,最快也只能達到o nlgn c void q...

快速排序法

include stdafx.h include vos.h define table mid machine name midmachine define table midmach colname id id define table midmach colname ip ip define t...

快速排序法

快速排序法思想 在待排序的n個資料中取第乙個數字為基準數,陣列最前面放乙個標桿,陣列最後麵放乙個標桿,通過基準數和標桿 i,j 出的數進行比較,實現每次排序完時候,共三組數,不大於基準數 基準數 不小於基準數 舉例說明 5 i 4,6,8,3,9,2 j 基準數5 標桿 i 指向5位置,標桿 j 指...