字符串的快速排序
输入N(N<=100)个字符串(长度不超过20)进行从小到大排序,要求排序算法使用快速排序并输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void quicksort(char *a[],int low,int high);
int partition(char *a[],int low,int high);
int main()
{
int n,i=0;
scanf("%d\n",&n);
char *a[n],str[21];
while(i<n){
gets(str);
a[i]=(char *)malloc(sizeof(char)*(strlen(str)+1));
strcpy(a[i],str);
i++;
}
quicksort(a,0,n-1);
for(int i=0;i<n;i++){
printf("%s\n",a[i]);
}
return 0;
}
void quicksort(char *a[],int low,int high){
if(low<high){
int pivotpos=partition(a,low,high);
quicksort(a,low,pivotpos-1);
quicksort(a,pivotpos+1,high);
}
}
int partition(char *a[],int low,int high){
char pivot[11];
strcpy(pivot,a[low]);
while(low<high){
while(low<high&&strcmp(a[high],pivot)>0){
high--;
}
strcpy(a[low],a[high]);
while(strcmp(a[low],pivot)<0&&low<high){
low++;
}
strcpy(a[high],a[low]);
}
strcpy(a[low],pivot);
return low;
}
运行结果: