AcWing 785. 快速排序


AcWing 785. 快速排序

qq_pic_merged_1596864959814.jpg

#include <iostream>
using namespace std;
const int N = 100010;
int n, a[N];
void quicksort(int l, int r) {
    // 递归边界条件
    if (l >= r) return;
    // 步骤 ① 中 C 方式确定分界点
    int x = a[l + r >> 1];
    // 步骤 ② 中 B 方式的 a 步
    int i = l - 1, j = r + 1;
    // 步骤 ② 中 B 方式下方的“注” 确定循环条件 i, j 相遇时划分完毕
    while (i < j) {
        // 步骤 ② 中 B 方式的 b 步
        do i++; while (a[i] < x);
        // 步骤 ② 中 B 方式的 c 步
        do j--; while (a[j] > x);
        // 步骤 ② 中 B 方式的 d 步
        if (i < j) swap(a[i], a[j]);
    }
    // 递归处理左边区间
    quicksort(l, j);
    // 递归处理右边区间
    quicksort(j + 1, r);
}
int main() {
    cin >> n;
    for (int i = 0; i < n; i++) cin >> a[i];
    quicksort(0, n - 1);
    for (int i = 0; i < n; i++) cout << a[i] << " ";
}
void qsort(int *q,int l,int r)
{
	if(l>=r) return ;
	int i=l-1,j=r+1,x=q[l+r >>1];
	while(i<j)
	{
		while(q[++i]<x);
		while(q[--j]>x);
		if(i<j) swap(q[i],q[j]);
	}
	qsort(q,l,j);
	qsort(q,j+1,r);
}

文章作者: LHL
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LHL !
评论
 上一篇
10大排序算法总结 10大排序算法总结
排序算法的分类:1插入:插入,折半插入,希尔2交换:冒泡,快速3选择:简单选择,堆4归并:归并(不只二路归并)5基数:
2021-04-10 LHL
下一篇 
经典汉诺塔 经典汉诺塔
经典汉诺塔
2021-04-05 LHL
  目录