QuickSort/快速排序/快排
来源:互联网 发布:apache评分与死亡率 编辑:程序博客网 时间:2024/04/29 01:13
#include <stdio.h>#include <time.h>#include <getopt.h>#include <stdlib.h>void exchange(int *array,int i1,int i2){ int temp; temp=array[i1]; array[i1]=array[i2]; array[i2]=temp;}int partition(int *array,int begin,int end){ int pivot_index; int pivot; int i,j; srand(time(NULL)); pivot_index=rand()%(end-begin+1)+begin; exchange(array,pivot_index,end); pivot_index=end; pivot=array[pivot_index]; j=begin-1; for(i=begin;i<end;i++) { if(array[i]<pivot) { j++; exchange(array,i,j); } } exchange(array,j+1,pivot_index); return j+1;}void quicksort(int *array,int begin,int end){ int pa; if(begin<end) { pa=partition(array,begin,end); quicksort(array,begin,pa-1); quicksort(array,pa+1,end); }}int main(int argc,char *argv[]){ int op; int num; int i; FILE *fp_input=stdin; FILE *fp_output=stdout; int *array; while((op=getopt(argc,argv,":i:o:"))!=-1) { switch(op) { case 'i': fp_input=fopen(optarg,"r"); if (fp_input==NULL) { fprintf(stderr,"open file %s fail!",optarg); return 1; } break; case 'o': fp_output=fopen(optarg,"w"); if(fp_output==NULL) { fprintf(stderr,"open file %s fail!!",optarg); return 1; } break; case ':': fprintf(stderr,"option needs a value\n"); break; case '?': fprintf(stderr,"unknow option: %c\n",optopt); break; } } fscanf(fp_input,"%d",&num); array=(int *)malloc(num*sizeof(int)); if (array==NULL) { fprintf(stderr,"out of space!!!\n"); return 2; } for(i=0;i<num;i++) { fscanf(fp_input,"%d",array+i); } quicksort(array,0,num-1); for(i=0;i<num;i++) { fprintf(fp_output,"%d",*(array+i)); } fprintf(fp_output,"\n"); free(array); fclose(fp_input); fclose(fp_output); return 0;}