快速排序

简介: 复习acwing算法基础课的内容,本篇为讲解数学知识:快速排序,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。

文章目录

前言

一、快速排序

二、例题,代码

AcWing 785. 快速排序

本题解析

AC代码

AcWing 786. 第k个数

本题解析

AC代码

三、时间复杂度


前言

复习acwing算法基础课的内容,本篇为讲解数学知识:快速排序,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。


一、快速排序

提供快排模板:

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);
}

本模板来自:AcWing算法基础课


二、例题,代码

AcWing 785. 快速排序

本题链接:AcWing 785. 快速排序

本博客提供本题截图:

image.png

本题解析

板子题,直接套模板

AC代码

#include <iostream>
#include <algorithm>
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;
}

AcWing 786. 第k个数

本题链接:AcWing 786. 第k个数

本博客提供本题截图:

image.png

本题解析

同样是直接套板子的题目

AC代码

#include <iostream>
#include <algorithm>
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, k;
    scanf("%d%d", &n, &k);
    for (int i = 0; i < n; i ++ ) scanf("%d", &q[i]);
    quick_sort(q, 0, n - 1);
    printf("%d", q[k - 1]);
    return 0;
}

三、时间复杂度

关于快速排序的时间复杂度以及证明,后续会给出详细的说明以及证明过程,目前先鸽了。



目录
相关文章
|
6月前
快速排序(超超详细,因为自己也不是很会)
快速排序(超超详细,因为自己也不是很会)
|
1天前
快速排序
快速排序
7 0
|
4月前
|
C++
C++快速排序
C++快速排序
38 1
|
8月前
|
算法 搜索推荐 测试技术
快速排序详解
快速排序详解
46 0
|
9月前
|
人工智能 搜索推荐
【快速排序】
【快速排序】
|
9月前
|
算法 搜索推荐
快速排序到底有多快
快速排序到底有多快
54 0
【1. 快速排序】
思路: > 1. 确定分界点:q[l] , q[(1 + r)/2] , q[r] , 随机 > 2. 调整区间的范围:使得在`分界点左侧是数都<= x`, `分界点右侧的数都>= x `(`重点处理`)
64 0
【1. 快速排序】
|
C语言
快速排序就这么简单
从前面已经讲解了冒泡排序、选择排序、插入排序了,本章主要讲解的是快速排序,希望大家看完能够理解并手写出快速排序的代码,然后就通过面试了!如果我写得有错误的地方也请大家在评论下指出。
113 0
快速排序就这么简单
|
搜索推荐 C++
快速排序(C++实现)
一、快速排序的基本实现 快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想: 1、从数列中取出一个数作为基准数(枢轴,pivot)。 2、将数组进行划分(partition),将比基准数大的元素都移至枢轴右边,将小于等于基准数的元素都移至枢轴左边。 3、再对左右的子区间重复第二步的划分操作,直至每个子区间只有一个元素。 快排最重要的一步就是划分了。划分的过程用通俗的语言讲就是“挖坑”和“填坑”。
420 0