快速排序法(一)

2021-08-27 12:44:14 字數 1598 閱讀 2184

說明快速排序法(

quick sort

)是目前所公認最快的排序方法之一,

快速排序法的基本精神是在數列中找出適當

的軸心,然後將數列一分為二,分別對左邊與右邊

數列進行排序,而影響快速排序法效率的正是軸心的選擇。

這是第乙個快速排序法版本,是在多數的教科書上所提及的版本,因為它最容易理解,

也最符合軸心分割與左右進行排序的概念,適合對初學者學習。

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

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

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

如果i >= j

,則離開本迴圈 如果

i < j

,則交換索引i與

j兩處的值

將左側的軸與

j進行交換

對軸左邊進行遞迴

對軸右邊進行遞迴

透過以下演演算法,則軸左邊的值都會小於

s,軸右邊的值都會大於

s,如此再對軸左右兩邊進行

遞迴,就可以對完成排序的目的,例如下面的例項,

*表示要交換的數,

表示軸:

[33] 65* 23 90 1 34 43 39 87 5*

[33]5 23* 90 1 34 43 39 87* 65

[33]5 23 90* 1* 34 43 39 87 65

[33]5 231 90 34 4339 87 65

[5] 23133 [90]34 4339 87 65

在上面的例子中,

33左邊的值都比它小,而右邊的值都比它大,如此左右再進行遞迴至排序完成。

#include

#include

#include

#define max 10

#define swap(x,y)

void quicksort(int, int, int);

int main(void)

;int i, num;

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");

return 0;}

//快速排序

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 2 但是在多數的情況下,快速排序法的效率表現是相當不錯的。快速排序法的基本精神是在數列中找出適當的軸心,然後將數列一分為二,分別對左邊與右邊數列進行排序,而影...

快速排序法

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