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);
    }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值