動機:
對於 Quick Sort 排序演算法,
再要求你寫個 C++ function,
要如何寫呢?!
說明:
利用 Code::Blocks 10.05 免費軟體,
再撰寫相關的程式即可達成要求, 程式碼如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
#define SWAP(x, y) { int t; t = x; x = y; y = t; }
using namespace std;
void quickSort(int[], int, int);
void printArray(int[]);
int main(void)
{
// 產生一個新的亂數數列
srand(time(NULL));
// 宜告10個數字之陣列, 並清空
int number[MAX] = {0};
// 產生 1-99 的亂數, 並取 10 個數字
for(int i = 0; i < MAX; i++)
number[i] = (rand() % 99) + 1;
printf("排序前:");
printArray(number);
// 執行 Quick Sort 演算法
quickSort(number, 0, MAX - 1);
printf("排序後:");
printArray(number);
return 0;
}
// Quick Sort algorithm
void quickSort(int number[], int left, int right)
{
if(left < right)
{
int i = left;
int j = right + 1;
while( 1 )
{
// 向右找 ++i, 直到找到大於 number[left]=s 的數
while( (i + 1 < MAX) && (number[left] > number[++i]) ) ; // number[left] = s = 左側的軸
// 向左找 --j, 直到找到小於 number[left]=s 的數
while( (j - 1 > -1) && (number[left] < number[--j]) ) ;
if(i >= j)
break; // 離開迴圈
SWAP( number[i], number[j] ); // 交換 索引i 與 j 兩處的值
}
SWAP( number[left], number[j] ); // 交換 左側的軸s 與 j 兩處的值
quickSort( number, left, j - 1 ); // 對軸s左邊進行遞迴
quickSort( number, i, right ); // 對軸s右邊進行遞迴
}
}
// 將陣列元素輸出
void printArray(int number[])
{
for(int i = 0; i < MAX; i++)
printf("%02d ", number[i]); // 表示右切齊最少印2位,不足處補0
printf("\n");
}
參攷: Algorithm Gossip: 快速排序法(一)
執行檔下載連結: https://docs.google.com/open?id=0B_4eUrknq7N1ZTdmOTY3NmQtMDIxMS00ODViLTk4MTEtZjYwNTRlZGIyMmMy
留言