之前写过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);
}
}
本文介绍了一种使用C语言实现的快速排序算法,该算法在《数据结构》一书中提及,并进行了优化。在作者的测试环境中,该算法能以极高的效率对100万个随机数进行排序,仅需0.3秒。
1520

被折叠的 条评论
为什么被折叠?



