快速排序

快速排序算法详解
本文介绍了一种高效的排序算法——快速排序,并提供了详细的算法原理及其实现代码。快速排序采用递归分治的思想,其时间复杂度一般情况下为O(nlgn)。文中还展示了如何从文件读取数据进行排序并保存至另一文件。

 

快速排序算法

快速排序主要思想:递归  分治

快速排序算法原理可参考:舞动的排序算法 快速排序

复杂度分析:空间复杂度不需要额外消耗空间存储数组;时间复杂度:最差情况O(n^2),最优情况O(nlgn),一般情况O(nlgn)

实现代码如下(从文件中读取数据,排序后再存储到另外一个文件中)

#include<stdio.h>

#define MAX 100

int quicksort(int *arry, int low, int high)
{
    int ii = low;
    int jj = high;
    int key = arry[ii];

    if(low>high)                           //如果左边数组大于右边,结束排序
        return 0;

    while(ii<jj)
    {
        while((key<=arry[jj]) && (ii<jj))  //对右边数组排序
            jj--;
        arry[ii] = arry[jj];

        while((key>=arry[ii]) && (ii<jj))  //对左边数组排序
        {         
            ii++;
        }
        arry[jj] = arry[ii];
    }
    arry[ii] = key;                        //查找一遍后将key回归
    quicksort(arry, low, ii-1);
    quicksort(arry, jj+1, high);
}

int main()
{
    int arry[MAX];
    int i;
    int len=0;
    FILE *file_in,*file_out;               //定义文件指针

    file_in = fopen("data_in.txt","r");
    if(file_in == NULL)
    {
        printf("无效的文件");
        return -1;
    }

    while(!feof(file_in))                  //从文件中读取待排序的数据
    {
        fscanf(file_in,"%d",&arry[len]);
        len = len+1;
    }

    quicksort(arry,0,len-1);               //排序函数

    file_out = fopen("data_out.txt","w"); 
    if(file_out == NULL)
    {
        printf("无法创建文档");
        return -1;
    }

    for(i=0;i<len;i++)                     //将排序后的数据写入文件
    {
        fprintf(file_out,"%d ",arry[i]);
    }

    fclose(file_in);
    fclose(file_out);

    return 0;
}

 

转载于:https://www.cnblogs.com/xiaokai0126/p/4382126.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值