快速排序(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;
}