遞迴與分治--快速排序
阿新 • • 發佈:2019-01-08
#include<cstdio> #include<algorithm> using namespace std; int Partition(int a[], int s, int t) //劃分演算法 { int i = s, j = t; int tmp = a[s]; //用序列的第1個記錄作為基準 while (i != j) //從序列兩端交替向中間掃描,直至i=j為止 { while (j > i && a[j] >= tmp) j--; //從右向左掃描,找第1個關鍵字小於tmp的a[j] a[i] = a[j]; //將a[j]前移到a[i]的位置 while (i < j && a[i] <= tmp) i++; //從左向右掃描,找第1個關鍵字大於tmp的a[i] a[j] = a[i]; //將a[i]後移到a[j]的位置 } a[i] = tmp; return i; } void QuickSort(int a[], int s, int t) //對a[s..t]元素序列進行遞增排序 { if (s < t) //序列內至少存在2個元素的情況 { int i = Partition(a, s, t); QuickSort(a, s, i-1); //對左子序列遞迴排序 QuickSort(a, i+1, t); //對右子序列遞迴排序 } } int main() { int a[] = {1,3,5,7,6,2,4,8,10,9}; int length = sizeof(a) / sizeof(int); //計算出陣列的長度 -- sizeof計算的是位元組長度 QuickSort(a, 0, length); for(int i = 0; i < length; i++) { printf("%d%c",a[i], i == length-1?'\n':' '); } return 0; }