算法1:快速排序思想及其算法代码 附模板C++

快排介绍:所谓快排,就是冒泡排序的升级版 他是一种不稳定的排序算法。(什么是稳定的算法呢?在一组无序的数中,当x等于y时,x在y的左边,排完序后x依然在y的左边,这就是稳定的排序算法。如果x跑到y的右边去了,则他就是不稳定的算法)

具体思想:

第一步:对于一组无序的数,我们一般划定一个基准作为比较的对象,比如可以在一组数的最左或最右或中间(我的习惯是基准放在中间 这样可以避免一些边界问题),并记为x。

第二步(重点,难点):将小于x的放左面,将大于x的放后面。采用双指针的算法。L向右边依次移动,R向左边依次移动 当l对应的值大于x(我们要求L下的数都小于x,违背了我们的意愿)则左指针停下,该语句完成。然后R向左边走,当r对应的值小于x(我们目的要r对应的值大于x,违背了意愿)则停下。现在两个指针都不动了,那么我们就把l和r对应的值交换位置。 之后l和r继续按规定的方向走 要是再停下就再交换。最后一定会使得x左边的数都小于x ,右边的数都大于x。(相等情况的话可以自己动手写写,比较简单 )

第三步:递归处理左边部分和右边部分。这就使用quick_sort函数。

#include<iostream>

using namespace std;

 

const int N = 100010;

int q[N];

void quick_sort(int q[],int l,int r)

{

    if(l>=r) return;

    int i = l-1,j = r+1;

    int x = q[(l + r )/2];

    while(i < j)

    {

        do i ++; while(q[i] < x);

        do j --;while(q[j] > x);

        if(i< j) swap(q[i],q[j]);

    }

    quick_sort(q,l,j);

    quick_sort(q,j+1,r);

}

int main()

{

    int n;

    cin>>n;

    for(int i = 1;i<=n;i++) cin>>q[i];

    

    quick_sort(q,1,n);

    

    for(int i = 1;i<= n;i++) cout << q[i]<<" ";

    return 0;

}

大家可以看到代码比较短 有不懂的问题可以留言交流 本人也是双非计算机专业大二学生 有什么好的见解欢迎指正  大家一起努力进步 朝自己梦想的大厂加油。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值