前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速排序(quick sort)C++实现

快速排序(quick sort)C++实现

作者头像
kalifa_lau
发布2018-04-26 14:54:48
6450
发布2018-04-26 14:54:48
举报
文章被收录于专栏:kalifaの日々

每次选一个轴pivot(我选数组的第一个元素arr[p]),遍历其余数组元素使得比arr[p]大的数都在arr[p]的右边,比arr[p]小的数都在arr[p]的左边,然后递归处理arr[p]的左边和arr[p]的右边。

注意:

  • 快排不稳定
  • 时间复杂度nlogn,空间复杂度logn
可运行代码:
代码语言:javascript
复制
#include <iostream>
#include <vector>
#include <unistd.h>
using namespace std;

int quickSort(vector<int> &arr,int l,int r)
{
    int len = r+1;
    int povit = arr[l];
    int index = l;
    l++;
    while(l<=r)
    {
        while(l<len&&arr[l]<=povit) l++;
        while(r>index&&arr[r]>=povit) r--;
       // cout<<"l = "<<l<<" r = "<<r<<endl;
        if(l<len&&r>0&&r>l)
        {
            int temp = arr[l];
            arr[l] = arr[r];
            arr[r] = temp;
        }
    }

    arr[index] = arr[r];
    arr[r] = povit;

    return r;

}
void recrusion(vector<int> &arr,int l,int r)
{
    //cout<<"new rec l = "<<l<<" r = "<<r<<endl;

    if(l>=r) return;
    int index = quickSort(arr,l,r);
    recrusion(arr,l,index-1);
    recrusion(arr,index+1,r);
    return;
}


int main()
{
    int a[] = {38,17,50,77,40,205,5};
    vector<int> arr(a,a+7);

    recrusion(arr,0,arr.size()-1);
    for(int i=0;i<arr.size();i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;


}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.03.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可运行代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档