說明快速排序法(
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...