ipython 发表于 2013-2-4 19:53:38

c语言quicksort 快速排序

之前写过C语言快速排序的算法,今天在《数据结构》(C语言版)清华大学出版社的快排,感觉比之前的更快,于是贴出来。
在我的机子上,排序100w的数据,只要0.3秒!其中我用python写了一个小脚本来生成100w个的随机数。附件为测试数据,本程序在GCC下编译通过。

#include "stdio.h"#include "time.h"int shu;int i,j,k,len;voidquick_sort(int left,int right);void read_file();void write_file();int partitions(int,int);int main(){    clock_t start, finish;    double duration;    read_file();    start = clock();    quick_sort(0,k);    finish = clock();    duration = (double)(finish - start) / CLOCKS_PER_SEC;    printf ("take %.6f second to sort %d datas \n",duration,k);    write_file();    for (i=0;i<100;i++)      printf("%d\n",shu);    return 0;}void read_file(){    FILE * fp;    char *filename = "100w.txt";    fp = fopen(filename,"r");    k=0;    while (fscanf(fp,"%d\n",&shu)!=EOF)      k++;    fclose(fp);}void write_file(){    FILE * fp;    char *filename = "sorted_100w.txt";    fp = fopen(filename,"w");    i = 0;    while (i<k)    {      fprintf(fp,"%d\n",shu);      i++;    }}int partition(int left,int right){    int key = shu;    while (left < right)    {      while (left < right && shu >= key)            right--;      shu = shu;      while (left < right && shu <= key)            left++;      shu = shu;    }    shu = key;    return left;}void quick_sort(int left,int right){    int mid ;    if (left < right)    {      mid = partition(left,right);      quick_sort(left,mid-1);      quick_sort(mid+1,right);    }}
页: [1]
查看完整版本: c语言quicksort 快速排序