`
ipython
  • 浏览: 289221 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

c语言quicksort 快速排序

阅读更多

之前写过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);
    }
}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics