快速排序法一

2021-08-19 15:47:06 字數 1828 閱讀 9339

/*

快速排序法

說明:快速排序法(quick sort)是目前所公認最快的排序方法之一(視解題的物件而定),雖然快速排序法在最差狀況下可以達o(n 2 )

,但是在多數的情況下,快速排序法的效率表現是相當不錯的。

快速排序法的基本精神是在數列中找出適當的軸心,然後將數列一分為二,分別對左邊與右邊數列進行排序,而影響快速排序法效率

的正是軸心的選擇。這邊所介紹的第乙個快速排序法版本,是在多數的教科書上所提及的版本,因為它最容易理解 ,也最符合軸心

分割與左右進行排序的概念,適合對初學者進行講解。

解法:這邊所介紹的快速演算如下:將最左邊的數設定為軸,並記錄其值為 s

廻圈處理:

令索引 i 從數列左方往右方找,直到找到大於 s 的數

令索引 j 從數列左右方往左方找,直到找到小於 s 的數

如果 i >= j,則離開迴圈

如果 i < j,則交換索引i與j兩處的值

將左側的軸與 j 進行交換

對軸左邊進行遞迴

對軸右邊進行遞迴

透過以下演演算法,則軸左邊的值都會小於s,軸右邊的值都會大於s,如此再對軸左右兩邊進行遞迴,就可以對完成排序的目的,例如

下面的例項,*表示要交換的數,表示軸:

[41] 24 76* 11 45 64 21 69 19 36*

[41] 24 36 11 45* 64 21 69 19* 76

[41] 24 36 11 19 64* 21* 69 45 76

[41] 24 36 11 19 21 64 69 45 76

21 24 36 11 19 [41] 64 69 45 76

在上面的例子中,41左邊的值都比它小,而右邊的值都比它大,如此左右再進行遞迴至排序完成。

*/#include

#include

#include

#define max 10

#define swap(x,y)

void quicksort(int, int, int

);int main(void

) ;

inti, num;

srand(time(null));

printf(

"排序前:");

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

quicksort(number,

0, max-1

);

printf(

"\n排序後:");

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

printf(

"%d

", number[i]);

printf("\n

");return0;

}void quicksort(int number, int left, int

right)

number[left] =number[j];

number[j] =s;

quicksort(number, left, j-1);//

對左邊進行遞迴

quicksort(number, j+1, right); //

對右邊進行遞迴

}}

執行結果:

快速排序法(一)

說明快速排序法 quick sort 是目前所公認最快的排序方法之一,快速排序法的基本精神是在數列中找出適當 的軸心,然後將數列一分為二,分別對左邊與右邊 數列進行排序,而影響快速排序法效率的正是軸心的選擇。這是第乙個快速排序法版本,是在多數的教科書上所提及的版本,因為它最容易理解,也最符合軸心分割...

快速排序法

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