基础课学习笔记(汇总){:target=”_blank”}
#include <iostream>
#include <cstdio>
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() {
scanf("%d", &n);
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
quicksort(0, n - 1);
for (int i = 0; i < n; i++) printf("%d ", a[i]);
}
quicksort(0, n - 1);这句是什么意思
传参
这份代码仍然可以被卡掉。。。
??? 在哪里? 试试加上快读?
因为您的基准数取的是中间的数,而不是随机一个位置的,所以是可以卡掉的
额, 你试试
发一下数据生成器吧
emmm抱歉我现在找不到了,但算导上提到有一个quick sort killer
学快排就是学个思想吧…正常都直接用sort, 卡不卡掉似乎也没那么重要
(您试试卡掉sort? /doge
sort卡不掉的,因为sort用的是内省排序,洛谷有篇日报专门讲的sort的实现,我也实现过内省排序,您可以看看我之前在acwing上发的
多谢斧正