快速排序浅析

什么是快速排序

快速排序其实是对冒泡排序的一种优化。
它的基本思想是将一个数组分为两部分,一边比较大一边比较小。然后在两边分别递归在进行一次。
为了 比较方便,我们引入了一个叫做基准数的东东。在实现快排时,我们要先确定一个基准数,为了方便,我们通常选数组的第一个(亦可选数组的中间)。然后我们从数组的两边分别开始历遍,这里我们假设是从小到大排。我们先定义两个变量i,j,充当是指针的作用。
首先i要指向最左边的数,j要指向最右边的数。i递增,j递减。当i遇到比基准数要大的数时,停下来。j遇到比基准数要小的数时停下来。此时再交换i,j所指的数。当i=j时,一轮排序接近完成。此时再将i所指的数与数组的第一个数相交换,此时基准数的左边都是小于基准数的数,右边都是大于基准数的数。第一轮排序正式完成。
然后我们再分别向基准数的左边,右边递归,排序就完成了。

C++代码

void quicksort(int a[],int left,int right)
{
    int i,j,temp,t;

    if(left>right)      return;

    temp=a[left];
    i=left;
    j=right;

    while(j!=i)
    {
        while(a[j]<=temp&&i<j) j--;
        while(a[i]>=temp&&i<j) i++;
        if(i<j)
        {
            t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
    }
        a[left]=a[i];
        a[i]=temp;

        quicksort(a,left,i-1);
        quicksort(a,i+1,right);

        return;
}

事实上,在OI中,我们可以调运排序函数:sort;跟多信息请点击:
http://www.cnblogs.com/A-Song/archive/2012/02/02/2336337.html
我的《快速排序简析》到此结束。如果想要了解更多关于快排的信息,请访问以下网址:
推荐:
http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html
写的很简洁,易懂;​
http://blog.csdn.net/morewindows/article/details/6684558
还有这个,写的也好。
http://blog.csdn.net/xuxiaotuzi33/article/details/5790696
总结了各种排序的思想,值得一看。
http://baike.baidu.com/link?url=l_sJaZHtIkG5mUqW8izexyjhbbG4q5sZ1zm-mn66Y4ycxaJ8lWzuKnQqSqTyNIz5V4SMjWzELZ4H3sW6vEWcYz0G6YavKvy2pWK4w2hmXpqwDfrCvCGPl0edE0rvysxOOZ3WqtFtvHYx5ZbFb7iLFh94b375oYpmO6Jxrt6T2fUpWVA95HZucfYGwtqfG5RL0mMjuZK_5OrRNvW40e5nVaGGZIoX4NzZgXExjO9t-bK
百度百科的,有关于快搜的优化。但写的比较乱。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值