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

请写一下快速排序算法

问题

请写一下快速排序算法

我的回答

快排的核心思想是分治法,我们选择一个基准值,然后将数组分为小于基准值和大于基准值的两部分,再递归地对这两部分进行排序。

void quickSort(int arr[], int left, int right) {if (left >= right) return;  // 递归终止条件// 选择基准值,这里简单地选择最左边的元素int pivot = arr[left];// 分区过程int i = left, j = right;while (i < j) {// 从右向左找第一个小于基准的数while (i < j && arr[j] >= pivot) j--;// 从左向右找第一个大于基准的数while (i < j && arr[i] <= pivot) i++;// 交换这两个数if (i < j) {std::swap(arr[i], arr[j]);}}// 将基准值放到正确的位置std::swap(arr[left], arr[i]);// 递归排序左右两部分quickSort(arr, left, i - 1);quickSort(arr, i + 1, right);
}

这个实现中,我选择了最左边的元素作为基准值,然后通过双指针法进行分区。当然,这种选择基准值的方式在最坏情况下(如已排序数组)会导致O(n²)的时间复杂度。

为了优化,我们可以使用随机选择基准值或三数取中法:

int median3(int arr[], int left, int right) {int mid = left + (right - left) / 2;// 三数取中if (arr[left] > arr[mid]) std::swap(arr[left], arr[mid]);if (arr[left] > arr[right]) std::swap(arr[left], arr[right]);if (arr[mid] > arr[right]) std::swap(arr[mid], arr[right]);// 将基准值放到left+1位置std::swap(arr[mid], arr[left + 1]);return arr[left + 1];
}

快排的平均时间复杂度是O(nlogn),最坏情况是O(n²),但通过优化基准值选择,可以降低最坏情况发生的概率。空间复杂度主要是递归调用栈的深度,平均为O(logn),最坏为O(n)。

快排是不稳定的排序算法,相同值的相对顺序可能会改变。在实际应用中,对于小规模数据,我们通常会在快排的基础上结合插入排序来提高效率。"

http://www.dtcms.com/a/327038.html

相关文章:

  • 多路转接之epoll 【接口】【细节问题】【LT与ET模式】【Reactor】
  • 学习日志32 python
  • 1、JVM内存模型剖析及优化
  • Rocky Linux 10 部署 Kafka 集群
  • 全国产飞腾d2000+复旦微690t信号处理模块
  • 微软发布GPT-5赋能的Copilot:重构办公场景的智能革命
  • 数字孪生重构园区管理效率:技术落地与产业升级的三重跃迁
  • 亚马逊优惠券视觉体系重构:颜色标签驱动的消费决策效率革命
  • Nginx 启用 HTTPS:阿里云免费 SSL 证书详细图文教程(新手0.5小时可完成)
  • 从基础编辑器到智能中枢:OpenStation 为 VSCode 注入大模型动力
  • 正向传播与反向传播(神经网络思维的逻辑回归)
  • 【R语言数据分析开发指南】
  • 读《精益数据分析》:UGC平台的数据指标梳理
  • 【跨服务器的数据自动化下载--安装公钥,免密下载】
  • TinyVue表格重构性能优化详解
  • STL容器的使用时机
  • Appium+Python 实现移动应用自动化测试:从基础到实战
  • STFT、log-mel、MFCC 的区别
  • 梳理一下实现3D显示的途径有哪些?
  • QT(概述、基础函数、界面类、信号和槽)
  • Qt之QMetaEnum的简单使用(含源码和注释)
  • [激光原理与应用-253]:理论 - 几何光学 - 变焦镜头的组成原理及图示解析
  • excel-随笔记
  • 单例模式,动态代理,微服务原理
  • [特殊字符]深度解析 FastMCP:重构MCP应用开发的全维度革命
  • 当机械臂装上「智能大脑」:Deepoc具身智能模型如何重构传统自动化​
  • 力扣经典算法篇-50-单词规律(双哈希结构+正反向求解)
  • 【Golang】pprof 使用介绍:从数据采集到可视化分析
  • windows版本:Prometheus+Grafana(普罗米修斯+格拉法纳)监控 JVM
  • Webpack 介绍与使用的详细介绍