主要思想:分治法
步骤:
1.确定分界点x
2.划分区间,小于等于x的放左边,大于等于x的放右边(重点)
暴力做法:创建两个数组(额外占用空间)
优美做法:两个指针
3.递归处理左右两段
模板:
#include <iostream>
using namespace std;
const int N=1e6 + 10;
int n;
int q[N];
void quick_sort(int q[],int l,int r)
{
if(l>=r) return;//判断边界
int x=q[l];//定义分界点;定义为q[r]的话会发生边界问题
int i=l-1,j=r+1;//定义两指针
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()
{
scanf("%d",&n); //用scanf比cin快
for(int i=0;i<n;i++) scanf("%d",&q[i]);
quick_sort(q, 0, n-1);
for(int i=0;i<n;i++) printf("%d",q[i]);
return 0;
}