快速排序(c語言實現)
分治思想:通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵詞均比另一部分記錄的關鍵詞小,則可分別對兩部分記錄繼續進行排序,以達到目的。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define MAX 100
/* QuickSort */
int a[MAX];
void QuickSort(int start,int end){
int i,j,t,temp;
if(start>end) return;
temp = a[start];
i = start;
j = end;
while(i!=j){
while(a[j]>=temp&&j>i) j--;
while(a[i]<=temp&&j>i) i++;
if(i<j){
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
a[start] = a[i];
a[i] = temp;
QuickSort(start,i-1);
QuickSort(i+1,end);
}
int main(int argc, char *argv[]) {
int i,large;
srand((int)time(NULL));
printf("請輸入規模:");
scanf("%d",&large);
printf("請依次輸入這%d個數",large);
large = large + 1;
for(i=1;i<large;i++) scanf("%d",&a[i]);
for(i=1;i<large;i++) printf("%5d",a[i]);
printf("\n進行QuickSort:\n");
QuickSort(1,large-1);
for(i=1;i<large;i++) printf("%5d",a[i]);
return 0;
}