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

数据结构与算法——快速排序

快速排序

一、核心原理:分治策略

1、选一个基准元素,

2、两个指针往中间遍历,比基准值小的移到一边,比基准值大的移到另一边,

一轮遍历后,指针相交位置就是基准值应该放置的位置,同时数组也以基准值分成左右两部分;

3、对两边各自进行递归快排,直到整个数组有序;

二、算法稳定性:不稳定

随机选取基准值,相同的元素可能会分为不同的子数组中;

如:(5,3,2,5,1),基准值为左边第一个5,大于等于基准值的放左边,小于的放右边;

一轮排序后第二个5就在第一个5左边,两个5之间的顺序发生了变化,即不稳定;

三、时间复杂度:平均O(nlogn),最坏O(n^2)

平均O(nlogn):每次对半的划分数组递归排序;最大递归树深度为log(n+1);

最坏O(n^2):基准元素偏向边缘元素,基准元素两边数组大小相差很大,最大递归树深度为n;

四、空间复杂度:平均O(logn),最坏O(n);

由于递归过程需要使用栈空间来保存每一层递归调用的信息,空间复杂度主要考虑递归树的深度;

五、C#代码示例:

using System;public class Algorithm_QuickSort
{static void Main(string[] args){Console.WriteLine("快速排序");int[] array = { 5, 4, 9, 8, 7, 6, 0, 1, 3, 2 };QuickSort(array, 0, array.Length-1);for (int i = 0; i < array.Length; i++)Console.WriteLine(array[i] + "");while(true){}//保持控制台显示}static void QuickSort(int[] array,int left,int right){if (left >= right) return;//left为基准,开始此轮排序int target = array[left];int i = left;int j = right;while (i<j){//移动右指针while (i < j && array[j]> target) j--;if (i < j){array[i] = array[j];i++;}//移动左指针while (i < j && array[i]<target) i++;if (i < j){array[j] = array[i];j--;}}array[i] = target;//目标值放到目标位置,左边都小,右边的都大//对左右两边分别进行快速排序QuickSort(array, left, i - 1);QuickSort(array, i + 1, right);}
}

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

相关文章:

  • Node.js技术原理分析系列——Node.js调试能力分析
  • 在Mac arm架构终端中运行 corepack enable yarn 命令,安装yarn
  • 蓝桥杯试题:计数问题
  • 数学建模与MATLAB实现:数据拟合全解析
  • C语言——排序(冒泡,选择,插入)
  • git如何下载指定版本
  • 数字电路-基础逻辑门实验
  • 新数据结构(9)——Java异常体系
  • 每日十题八股-补充材料-2025年2月15日
  • 使用 Python 爬虫获取微店快递费用 item_fee API 接口数据
  • 通过用户名和密码登录服务器有哪些方法
  • sort快排
  • 用xml配置spring, bean标签有哪些属性?
  • 纪念日倒数日项目的实现-【纪念时刻-时光集】
  • 无人机不等同轴旋翼架构设计应用探究
  • 1-8 gitee码云的注册与使用
  • 嵌入式硬件篇---OpenMV的硬件流和软件流
  • Word 里面嵌入DeepSeek
  • 聊聊 IP 地址和端口号的区别
  • rust学习一、入门之搭建简单开发环境
  • 浅聊MQ之Kafka与RabbitMQ简用
  • 【原创】解决vue-element-plus-admin无法实现下拉框动态控制表单功能,动态显隐输入框
  • SpringBoot开发——初步了解SpringBoot
  • 双轴伺服电机驱动控制器AGV、AMR专用双伺服电机驱动控制器解决方案
  • 【VB语言】EXCEL中VB宏的应用
  • Ubuntu添加桌面快捷方式
  • 10G EPON光模块
  • Elasticsearch+Logstash+Kibana可视化集群部署
  • 基于CanMV IDE 开发软件对K210图像识别模块的开发
  • win11系统 Docker Desktop提示Docker Engine stopped解决全过程记录