快排介绍:所谓快排,就是冒泡排序的升级版 他是一种不稳定的排序算法。(什么是稳定的算法呢?在一组无序的数中,当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;
}
大家可以看到代码比较短 有不懂的问题可以留言交流 本人也是双非计算机专业大二学生 有什么好的见解欢迎指正 大家一起努力进步 朝自己梦想的大厂加油。