24 快速排序法 3

2021-06-26 11:01:59 字數 1815 閱讀 2238

說明之前說過軸的選擇是快速排序法的效率關鍵之一,在這邊的快速排序法的軸選擇方式更加快了快速排序法的效率,它是來自演演算法名書 introduction to algorithms 之中。

解法先說明這個快速排序法的概念,它以最右邊的值 s 作比較的標準,將整個數列分為三個部份, 乙個是小於s的部份,乙個是大於s的部份,乙個是未處理的部份,如下所示 :

在排序的過程中,i 與 j 都會不斷的往右進行比較與交換,最後數列會變為以下的狀態:

然後將s的值置於中間,接下來就以相同的步驟會左右兩邊的數列進行排序的動作,如下所示:

整個演算的過程,直接摘錄書中的偽程式碼來作說明:

quicksort(a,p, r)

if p < r

then q

quicksort(a,p, q- 1)

quicksort(a,q+1,r)

end quicksort

partition(a,p, r)

x i

for j

do if a[j]<= x

then i

exchangea[i]a[j]

exchangea[i+1]a[r] return i+1

end partition

乙個實際例子的演算如下所示:

*******************************程式******************

#include

#include

#include

#define max 10

#define swap(x,y)

int partition(int,int,int);

void quicksort(int,int,int);

int main(void);

int i;

srand(time(null));

printf("排序前:");

for(i = 0; i < max; i++)

quicksort(number,0, max-1);

printf("\n排序後:");

快速排序法

一 快速排序演算法的基本特性 時間複雜度 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 指...