/*執行結果:快速排序法
說明:快速排序法(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...