快速排序

1.概述

快速排序,听这个名字就能想到它排序速度比较快方法,是一种分治思想,现在各种语言中自带的排序库很多使用的都是快速排序。

空间复杂度

快速排序是一种原地排序,只需要一个很小的栈作为辅助空间,空间复杂度为O(log2n),所以适合在数据集比较大的时候使用。

时间复杂度

时间复杂度比较复杂,最好的情况是O(n),最差的情况是O(n2),所以平时说的O(nlogn),为其平均时间复杂度。

2.基本思想

  • 从要排序的数据中取一个数为“基准数”。
  • 通过一趟排序将要排序的数据分割成独立的两部分,其中左边的数据都比“基准数”小,右边的数据都比“基准数”大。
  • 然后再按步骤2对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

该思想可以概括为:挖坑填数 + 分治法

3.代码

#include<bits/stdc++.h>
using namespace std;
int a[50005],n;
void qiukSort(int start,int end)
{
    if(start>=end)return;
    int index=a[start];//取最左边的为基数
    int i=start;
    int j=end;
    while(i<j)//当i=j跳出循环
    {      while(j>i&&a[j]>=index)//从右向左找到第一个比index大的数
      {
          j--;
      }
      a[i]=a[j];
      while(i<j&&a[i]<=index)//从左向右找到第一个比index小的数
      {
          i++;
      }
      a[j]=a[i];    }
      a[i]=index;//将基数填入最后的坑
      qiukSort(start,i-1);
      qiukSort(i+1,end);}
int main()
{
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    qiukSort(0,n-1);
      for(int k=0;k<n;k++)
      {
          cout<<a[k]<<' ';
      }
      cout<<endl;
}

注: 快速排序,在排完第一遍的时候,你所选择的基准数就是该数在排序序列中的真实位置
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值