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;}

原创粉丝点击