快速排序
快排的主要思想是基于分治
1.确定分界点 : 有几种取法: 左边界q[l]、中间值q[l + r >> 1]、右边界 q[r]、随机
2.调整区间: 使得区间内小于等于分界点数的位于分界点左边,大于等于分界点的在分界点右边
3.递归 处理分界点左右两个区间重复1.和2.两步,直至区间 l > r
#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 i = l - 1, j = r + 1, x = q[l];
while(i < j)
{
do i ++ ; while(q[i] < x); // 这边会先执行 i++ 决定了 前面 i= l - 1;
do j -- ; while(q[j] > x);
if(i < j)
{
int temp = q[i];
q[i] = q[j];
q[j] = temp;
}
}
quick_sort(q, l, j);
quick_sort(q, j + 1, r);
}
int main()
{
scanf("%d", &n);
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]);
}
浙公网安备 33010602011771号