【经典算法】快速排序


联系作者:humminwang@163.com

快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想:

  • 从数列中取出一个数作为基准数(枢轴,pivot)。
  • 将数组进行划分(partition),将比基准数大的元素都移至枢轴右边,将小于等于基准数的元素都移至枢轴左边。
  • 再对左右的子区间重复第二步的划分操作,直至每个子区间只有一个元素。

快速排序的时间复杂度在最坏情况下是 O ( N 2 ) O(N^2) O(N2),平均的时间复杂度是 O ( N ∗ l g N ) O(N*lgN) O(NlgN)

STL C++

#include <algorithm>
using namespace std;
void sort(RanIt first, RanIt last, Pred pr);//前两个参数为迭代器指针,分别指向容器的首尾,第三个参数为比较方法。
比较方法有三种:
1、默认(不写):对于内置类型,按照升序排列;
2、标准库自带函数:functional提供了一堆基于模板的比较函数对象:equal_to<Type>、not_equal_to<Type>、greater<Type>、greater_equal<Type>、less<Type>、less_equal<Type>。升序:sort(begin,end,less<data-type>()); 降序:sort(begin,end,greater<data-type>()).
3、自定义函数:如
int cmp(const int &a,const int &b)
{
  return a>b
}

快速排序详细实现 C++

int getIndex(int* nums,int low,int high)
{
   int temp=nums[low];
  
    while(low<high)
    {
        while(low<high&&nums[high]>=temp)
       {
            high--;
        }
        nums[low]=nums[high];
        while(low<high&&nums[low]<=temp)
        {
            low++;
        }
       nums[high]=nums[low];
    }
    nums[low]=temp;
    return low;
  }

void quicksort(int* nums, int low, int high)
{
    if(low<high)
    {
        int index =getIndex(nums,low,high);
        quicksort(nums,low,index-1);
        quicksort(nums,index+1,high);
    }
}

Reference:

https://www.cnblogs.com/miracleswgm/p/9199124.html
https://www.cnblogs.com/AndyJee/p/4676146.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值