快速排序的思路是:把序列分成左、右两部分,使得左边所有的数比右边所有的数小;递归这个过程,直到不能再分为止。
直接在原序列上进行划分:
- 尾部t是基准数,i指向比t小的左部分,j指向比t大的右部分

- 若data[j]大于等于data[t],j++;

3. 若data[j]<data[t],交换,然后i++,j++;

4. 重复上述步骤

5. 最后交换data[i]和data[t],得到结果。i指向基准数的当前位置

随机给n个数,进行快速排序
#include<iostream>
const int N=10005;
int data[N];
#define swap(a,b){int t=a;a=b;b=t;}
using namespace std;
int partition(int left,int right){//划分成左右两部分,以i指向的数为界
int i = left;
int t=data[right]; //把尾部的数看成基准数
for(int j=left;j<right;j++){
if(data[j]<t){
swap(data[j],data[i]);
i++;
}
}
swap(data[i],data[right]);
return i; //返回基准数的位置
}
void qsort(int left,int right)
{
if(left<right){
int m=partition(left,right); //划分
qsort(left,m-1); //i左边继续递归划分
qsort(m+1,right); //i右边继续递归划分
}
}
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>data[i];
}
qsort(1,n);
for(int i=1;i<=n;i++)
{
cout<<data[i]<<" ";
}
return 0;
}

来源:CSDN
作者:ker.
链接:https://blog.csdn.net/weixin_45895026/article/details/104030952