当前位置: 首页 > news >正文

【每日一题】洛谷 - 快速排序模板

今天的每日一题来自洛谷,题目要求对给定的 N N N 个正整数进行从小到大的排序,并输出结果。我们将使用经典的**快速排序算法(QuickSort)**来解决这一问题。下面我将从问题分析、代码实现、及快速排序的核心思想进行详细说明。

题目分析

我们需要将输入的 N N N 个整数进行排序。根据题目给定的提示, N N N 的范围可以高达 1 0 5 10^5 105,因此我们需要选用高效的排序算法。快速排序具有平均时间复杂度为 O ( N log ⁡ N ) O(N \log N) O(NlogN)

如果你不知道什么是快速排序,以及不了解原理的可以看我另外几篇博客:

  • 【数据结构】分治算法经典: 快速排序详解
  • 【数据结构】时间复杂度和空间复杂度是什么?

代码实现

//
// Created by XuanRan on 2024/10/18.
//#include "iostream"using namespace std;int n;
long long arr[10 * 10 * 10 * 10 * 10 + 5];void quickSort(int l, int r)
{int x = l, y = r, mid = arr[(r + l) / 2];while (x < y){while (arr[x] < mid) x++;while (arr[y] > mid) y--;if (x <= y){swap(arr[x], arr[y]);x++;y--;}}if (y > l) quickSort(l, y);if (x < r) quickSort(x, r);
}int main(int argc, char* argv[])
{cin >> n;for (int i = 0; i < n; i++){cin >> arr[i];}quickSort(0, n - 1);for (int i = 0; i < n; i++){cout << arr[i] << " ";}
}

代码详解

输入与数组初始化

首先,程序读取输入的整数 N N N,并通过 cin 将 N N N 个元素存入数组 arr 中。为了确保数组足够大,这里将数组大小设定为 1 0 5 10^5 105 以上。

快速排序的实现

quickSort(int l, int r) 函数是快速排序的核心部分:

  • 我们选择数组中间的元素 mid 作为基准值。
  • 通过两个指针 x 和 y,分别从左侧和右侧开始扫描数组,将比基准值小的元素放在基准值左边,比基准值大的元素放在基准值右边。
  • 当 x 和 y 指针相遇后,递归地对左右两部分数组分别进行排序,直到整个数组有序。

输出结果

排序完成后,程序遍历数组,并将排序好的元素输出。

快速排序的优缺点

优点:

快速排序的平均时间复杂度是 O ( N log ⁡ N ) O(N \log N) O(NlogN),相对于 O ( N 2 ) O(N^2) O(N2) 的冒泡排序、选择排序等,效率更高。
空间开销小,使用的是原地排序,不需要额外的存储空间。

缺点:

在最坏情况下(如数组已经有序),快速排序的时间复杂度会退化到 O ( N 2 ) O(N^2) O(N2)
为了避免最坏情况,可以采取随机选择基准值的策略,即随机化快速排序(Randomized QuickSort)。

http://www.lryc.cn/news/463186.html

相关文章:

  • Django模型优化
  • Python实现火柴人的设计与实现
  • 衡石分析平台系统分析人员手册-应用模版
  • Git和SVN
  • 【C语言教程】【常用类库】(十八)宏与预处理 - <stddef.h> 和 <stdbool.h>
  • 订单超时过期的实现方案的探讨
  • C++中的CRTP
  • go压缩的使用
  • 一图解千言,了解常见的流程图类型及其作用
  • 【微信小程序_19_自定义组件(1)】
  • 标准版admin后台页面添加及开发操作流程及注意事项
  • ‘perl‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  • 如何利用CMMI帮助组织消除低价值流程
  • 如何理解线程安全这个概念?
  • 代码随想录算法训练营第48天| 739. 每日温度,496.下一个更大元素 I,503.下一个更大元素II
  • Qt 支持打包成安卓
  • PDF工具类源码
  • NirCmd-Gui-Chinese-Introduction
  • 吴恩达深度学习笔记(7)
  • 二、数据离线处理场景化解决方案
  • 算法题总结(十四)——贪心算法(上)
  • hive on tez 指定队列后任务一直处于running状态
  • 闲说视频清晰度和各种格式、编码技术的发展历史
  • 嵌入式职业规划
  • Nginx - 实现 TCP/DUP流量的按 IP 动态转发
  • 基于深度学习的进化神经网络设计
  • 软考-软件设计师(10)-专业英语词汇汇总与新技术知识点
  • PyTorch 2.5 发布带来一些新特性和改进
  • 算法:560.和为k的子数组
  • C++之list(2)