快速排序C实现

随机快速排序代码,在测试一百万随机生成数情况下,平均运行时间在0.3s,在测试十万随机生成数情况下,平均运行时间在0.055s。时间复杂度O(nlgn)。


#include <stdio.h>
#define LEN 1000000
int arr[LEN];
void quickSort(int arr[],int p,int q);
int main()
{
    int i;

    for(i=0; i<LEN; i++)
    {
        arr[i]=rand();
    }

    quickSort(arr,0,LEN-1);
}

/*快速排序算法*/
void quickSort(int arr[],int p,int q)
{
    int i,j,r;
    int ranVal;
    int temp;
    if(p>=q) return;

    /*生成随机数,介于p,q之间,并与待排序数组最后一项交换*/
    ranVal=p+rand()%(q-p);
    {
        temp=arr[ranVal];
        arr[ranVal]=arr[q];
        arr[q]=temp;
    }

    r=arr[q];  //选最后一项作为pivot
    i=p-1;
    j=p;
    while(j<=q-1)
    {
        if(arr[j]<=r)
        {

            i++;
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
        j++;
    }

    i++;
    arr[q]=arr[i];
    arr[i]=r;

    quickSort(arr,p,i-1);  //recursion the left of pilot
    quickSort(arr,i+1,q);    //recursion the right of pilot
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值