快速排序

        快速排序是一种效率比较高的排序方法,时间复杂度为O(nlogn),这个时间基本上能够过绝大部分OJ,下面是它的主要排序方法:

        快速排序主要采取从数组尾和数组首两端同时比较排序的方法,选取数组尾即数组的最后一个元素为待比较的元素,然后从数组尾依次向前直到找到第一个比原来的待比较元素大的元素(此处实现数组的升序排列,若实现数组的降序排列则找到第一个比待比较元素小的元素),然后交换,再使数组首为待比较元素,从前向后找,直到找到第一个比它小的元素(与上面的注释一样,降序反之),然后交换。至此完成一个循环。再依次重复上述步骤,(运用递归的方法),直至数组首尾相遇。就排好了。

下面是代码:

void quicksort(int a[],int low,int high)        //待排序数组a,low为排序起点,high为排序终点。
{
   int i,j,temp;
   i=low;
   j=high;
   temp=a[i];
   if(low<high)                                //当排序起点小于终点时进行
   {
        while(i<j)                           
        {
             while(i<j && a[j]>=temp)         //从后向前查找直到找到第一个比temp小的元素
             {
                  j--;
             }
             a[i]=a[j];
             while(i<j && a[i]<=temp)         //从前向后查找直到找到第一个比temp大的元素
             {
                  i++;
             }
             a[j]=a[i];
        }
        a[i]=temp;                             //更新
        quicksort(a,low,i-1);                  //递归进行查找
        quicksort(a,j+1,high);
    }
    else                                       //当排序起点大于终点时,返回
    {
         return;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值