之前写过C语言快速排序的算法,今天在《数据结构》(C语言版)清华大学出版社的快排,感觉比之前的更快,于是贴出来。
在我的机子上,排序100w的数据,只要0.3秒!其中我用python写了一个小脚本来生成100w个的随机数。附件为测试数据,本程序在GCC下编译通过。
#include "stdio.h" #include "time.h" int shu[1000000]; int i,j,k,len; void quick_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[i]); return 0; } void read_file() { FILE * fp; char *filename = "100w.txt"; fp = fopen(filename,"r"); k=0; while (fscanf(fp,"%d\n",&shu[k])!=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]); i++; } } int partition(int left,int right) { int key = shu[left]; while (left < right) { while (left < right && shu[right] >= key) right--; shu[left] = shu[right]; while (left < right && shu[left] <= key) left++; shu[right] = shu[left]; } shu[left] = 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); } }