(坚持每天都写算法)算法基础复习part1基础算法1-1——快排
1.(坚持每天都写算法)算法基础复习part1基础算法1-2——归并排序
2.(坚持每天都写算法)算法基础复习part1基础算法1-1——快排
3.(坚持每天都写算法)算法基础复习part1基础算法1-34.(坚持每天都写算法)算法基础复习part1基础算法1-4——二分5.(坚持每天都写算法)算法复习与学习part1基础算法1-56.(坚持每天写算法)算法复习与学习part1基础算法1-6——高精度加法7.(坚持每天写算法)基础算法复习与学习part1基础算法1-7——高精度减法(处理t=1和t>1代码的写法,t为操作次数)8.(坚持每天都写算法)算法复习与学习part1基础算法1.8高精度乘法9.(坚持每天写算法)算法复习和学习part1基础算法part1-9高精度乘法10.(坚持每天写算法)算法学习与复习part1基础算法part1-10——前缀和11.(坚持每天写算法)算法复习与学习part1基础算法part1-11——差分12.(坚持每天写算法)算法复习与学习part1基础算法part1-12——双指针算法13.(坚持每天写算法)算法学习与复习part1基础算法1-13——位运算14.(坚持每天写算法)算法复习和学习part1基础算法part1-14——离散化之前写过大概100多道的题目,但是之后因为各种原因很久都没有碰过算法题目,记忆丢失,虽然写题的时候有思路,但是一些语言完全就忘记怎么写了,之后应该也会出一些多语言练习,巩固一下语言基础。
本来想着有笔记所以就只是创建博客但是没有写,然后最近找实习什么的压力蛮大的,所以就写一下纯当疏解压力了。
由于是第一篇随笔,不会太考虑格式,但之后会去找模板
#include <iostream> using namespace std; const int N = 100010; 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 + 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() { int n; 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]); return 0; }
思路:快排是按照二分分成两个数组,右边数组的元素必须大于左边数组的元素,如果在右边数组找到了比a[mid]小的数字,那么就要交换一下,使用递归逐一分割数组。
但是这一道题有一个边界问题,看懂了边界问题建议直接背模板,比赛什么的如果用到一时间肯定是想不起来很多细节的。
细节参考链接:AcWing 785. 快速排序算法的证明与边界分析 - AcWing
关于时间复杂度:看这个代码就知道了,最好是O(nlogn),最差是O(n^2)。
本文作者:程序计算机人
本文链接:https://www.cnblogs.com/clina/p/17948357
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】