2024-01-06 00:22阅读: 9评论: 0推荐: 0

(坚持每天都写算法)算法基础复习part1基础算法1-1——快排

之前写过大概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 中国大陆许可协议进行许可。

posted @   程序计算机人  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 Lions Pride Audio artist
  2. 2 Salty Sailor David Arkenstone
  3. 3 Stonefire David Arkenstone
Salty Sailor - David Arkenstone
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Not available