【八大排序】快速排序

01 AUTOSAR CP标准文档阅读指南 阅读详情

目录

目录

前言

一、排序规则

划分规则

二、代码实现

 总结


前言

快速排序(Quicksort),是对冒泡排序算法的一种改进。快速排序算法通过多次比较和交换来实现排序。

特点:数据越乱排序速度越快,越有序排序速度越慢。

时间复杂度最好O(nlogn) 最坏情况O(n^2)  平均时间复杂度O(nlogn)  

空间复杂度O(nlogn)  

稳定性:不稳定


一、排序规则

将数组内第一个元素作为我们的基准值,然后以基准值进行划分,划分出两部分,小于基准值都在基准值左边,大于基准值都在基准值右边,继续按照同样的规则去划分这两部分,直到所有的元素都放在自己合适的位置。

划分规则

1.从右向左找比基准值小的,放左边。

2.从左向右找比基准值大的,放右边

3.反复执行1.2直到left与right相遇

我们设立一组值:{6,3,2,1,9,8,7};

对其进行快速排序,如下图所示:

与冒泡排序类似,但是以基准值进行分隔后,使其对数组元素的遍历次数降低,降低了时间复杂度。

二、代码实现

//根据基准值对其进行划分,然后返回基准值所在下标
int Partition(int arr[], int left, int right)
{
	int tmp = arr[left];

	while (left < right)
	{
		//1.从右向左找,比基准值小的  放进去
		while (left<right && arr[right]>tmp)
			right--;
		if (left == right)
		{
			break;
		}
		arr[left] = arr[right];

		//2.从左向右找,比基准值大的  放进去
		while (left < right && arr[left] <= tmp)
			left++;
		if (left == right)
		{
			break;
		}
		arr[right] = arr[left];
	}
	//此时left==right

	arr[left] = tmp; //arr[right]=tmp;
	return left;
}
void Quick(int arr[], int left, int right)
{
	if (left < right)//保证left到right之间最少有两个值
	{
		int par = Partition(arr, left, right);
		if (left < par - 1)//保证基准值左边部分最少有两个值
		{
			Quick(arr, left, par - 1);
		}

		if (par + 1 < right)//保证基准值右边部分最少有两个值
		{
			Quick(arr, par + 1, right);
		}
	}
}
void QuickSort(int arr[], int len)
{
	Quick(arr, 0, len - 1);
}

 总结

以上为快速排序的排序规则和代码实现,本文简单介绍了快速排序的实现,快速排序的思想可以帮助问题的分解,而且快速排序还有许多种优化方式,是值得深度思考的排序方法。

YOLO26-seg分割优化:轻量化卷积魔改 | 新的partial convolution(PConv)结合C3k2 | CVPR2023 ​​​​​摘要:本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其关键架构改进及其在实时边缘目标检测中的性能基准测试。YOLO26于2025年9月发布,是YOLO系列最新、最先进的成员,专为在边缘及低功耗设备上实现高效、精确且易于部署的目标而构建。本文依次详述了YOLO26的架构创新,包括:移除了分布焦点损失(DFL);采用端到端的无NMS推理;集成了渐进损失(ProgLoss)与小目标感知标签分配(STAL);以及引入了用于稳定收敛的MuSGD优化器。 阅读详情

相关推荐

DDR4协议规范之(一)DDR4结构和寻址

DDR4 SDRAM结构和寻址DDR4 SDRAM的封装和寻址新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 DDR4 SDRAM的封装和寻址 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习

YJFeiii的博客 3万+

八大排序之快速排序

一、快速排序的思想 通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 通俗来讲是选择一个基准点,将整个数据分别从前和从后向前比较,小数向前走,大数向后走。所以这个基准点的选择就很关键。 二、图解快速排序 待排序的关键字序列为: [15 3 2 43 46 75 12 4 235 45 7] ...

qq_43411563的博客 1831

5G R18标准:AI/ML如何重塑空口优化与网络架构

人工智能与机器学习正逐步成为通信网络优化的核心技术。其核心原理在于通过数据驱动模型,从海量网络数据中学习信道变化、用户行为等统计规律,替代传统的基于固定规则的优化方法。这一技术范式能显著提升网络性能与效率,尤其在空口资源管理、干扰协调和能耗控制等场景中价值突出。在5G Advanced(R18)标准化框架下,AI/ML被系统性地引入空口设计,聚焦于信道状态信息反馈增强、波束管理与预测等关键用例。通过定义网络侧AI、终端侧AI及联合学习的标准化接口与流程,R18旨在实现跨厂商设备的智能协同,推动无线网络向自适

weixin_35671843的博客 242

快速排序在数组有序和无序情况下的时间复杂度

快速排序简单分区算法双指针分区算法benchmark测试 快速排序有两点要注意: 一、partition分区算法的选择: 简单分区算法:选择一个基数,遍历数组元素和基数比较,如果元素nums[left]比基数大,就和数组nums[right]交换,right–,如果元素nums[left]比基数小,left++ 双指针分区算法:从left和right分别定义一个指针,如果元素nums[left]比基数大,暂停遍历,如果元素nums[left]比基数小,left++;如果元素nums[right]比基数小,

coder_wangYang的博客 5047

Python 驱动 CAD 二次开发:从零搭建自动化绘图环境

本文详细介绍了如何利用Python进行CAD二次开发,实现自动化绘图。通过win32com库建立Python与CAD软件的通信,文章从环境搭建、连接CAD、操作文档到核心绘图与批量处理,提供了完整的实战指南。该方法能显著提升机械设计、建筑绘图等领域的重复性工作效率,将创造力从繁琐劳动中解放出来。

weixin_29093169的博客 1227

VINS-Fusion实战:从零搭建无人机视觉惯性导航系统(附ROS配置指南)

本文提供了一份详尽的VINS-Fusion实战指南,涵盖从硬件选型、传感器标定到ROS节点配置与参数调优的全过程。重点解析了如何将VINS-Fusion视觉惯性里程计系统与PX4飞控深度集成,并实现室外GPS融合,旨在帮助开发者从零搭建稳定、高精度的无人机视觉惯性导航系统。

lll78的博客 864

八大排序——快速排序

八大排序——快速排序

2301_76895050的博客 1464

双目相机测距原理

普通双目相机具有如下特点:左右两个相机位于同一平面(光轴平行),且相机参数(焦距f)一致。其原理图如下:如图所示,P点为相应的物体位置,CL和CR为左右相机光心位置,PL和PR分别为左相机和右相机拍摄的P点成像结果。f为相机焦距,Z为物体距相机的深度距离,b为左右相机基线距离根据几何关系有:则相应的深度信息计算公式为:(1)其中XL-XR为视差。其余在两侧的情况同样可以用几何关系分析得到该表达式(1),即对于普通双目相机测距可以直接通过公式(1)得到深度结果。

doudou2weiwei的博客 4542

java快排_八大排序-快速排序(手写快排)

概要快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一。其广泛应用的主要原因是高效,核心算法思想是分而治之。快速排序经常会被作为面试题进行考察,通常的考察思路是快排思想、编码实践之手写快排以及进一步对快排的优化。事实上在Java标准库中Arrays类的sort方法里源码也正是使用了优化后的快速排序(具体源码以及优化分析后续会推文讲解),掌握快排算法对于...

weixin_39895995的博客 428

Linux内核4.14版本——drm框架分析(1)——drm简介

drm框架分析

yangguoyu8023的博客 1万+

TypeScript版LangChain环境配置全攻略:从零搭建AI应用开发环境

大语言模型(LLM)作为当前AI应用开发的核心技术,通过API接口为开发者提供了强大的自然语言处理能力。其工作原理基于Transformer架构,通过预训练和微调实现对人类语言的深度理解与生成。在工程实践中,开发者需要将LLM与外部工具、数据源和业务逻辑有效集成,这正是LangChain框架的技术价值所在——它提供了标准化的组件和接口,简化了复杂AI应用的构建流程。应用场景涵盖智能客服、内容生成、数据分析助手等多个领域。本文聚焦于TypeScript/JavaScript生态下的LangChain开发,详细

weixin_29055699的博客 253

快速排序时间复杂度_算法面试八大排序(上)

点击上方 “ 言淦说 ”,选择 “加为星标”第一时间关注各种技术干货!前言八大排序包含:冒泡排序、选择排序、插入排序、快速排序(快排)、归并排序、基数排序、希尔排序、堆排序。本文主要讲述前5种,其中,建议冒泡排序、选择排序、插入排序可以放在一起对比;快速排序和归并排序可以放在一起对比。注:本文的排序采用Golang实现。排序基础1.时间复杂度、空间复杂度以及大O表示法,这里不再赘述2.线...

weixin_39683176的博客 623

微信小程序 - error_msg:net::ERR_CONNECTION_RESET“(“errno“:600001,“errMsg“:“uploadFile:fail errcode:-101)

"errno":600001,"errMsg":"uploadFile:fail errcode:-101 cronet_error_code:-101 error_msg:net::ERR_CONNECTION_RESET"微信小程序,微信小程序wx.uploadFile报错,uniapp微信小程序uni.uploadFile上传文件报错,微信小程序调用wx.uploadFile返回错误ERR_CONNECTION_RESET,如何解决这个问题,上传图片出现报错,小程序上传视频报错,上传文件出现报错,如何

🏆 前端领域优质创作者 5408

java 快排_八大排序-快速排序(搞定面试之手写快排)

概要快速排序由C. A. R. Hoare在1960年提出,是八大排序算法中最常用的经典排序算法之一。其广泛应用的主要原因是高效,核心算法思想是分而治之。快速排序经常会被作为面试题进行考察,通常的考察思路是快排思想、编码实践之手写快排以及进一步对快排的优化。事实上在Java标准库中Arrays类的sort方法里源码也正是使用了优化后的快速排序(具体源码以及优化分析后续会推文讲解),掌握快排算法对于...

weixin_39765869的博客 345

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

八大排序算法(希尔排序、快速排序、堆排序)

八大排序算法-复杂算法(希尔排序、快速排序、归并排序)希尔排序-插入排序的扩展快速排序-冒泡排序的扩展堆排序 希尔排序-插入排序的扩展 function shellSort(arr) { var len = arr.length; for (var fraction = Math.floor(len / 2); fraction &amp;amp;amp;gt; 0; fraction = Math.floor(fr...

叶素凡 1217

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

DS初阶:八大排序之堆排序、冒泡排序、快速排序

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法

weixin_51142926的博客 5776

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

【数据结构】八大排序之快速排序算法

数据结构快速排序详解.内容包括:快排的简介及思想,快排代码实现的三种方式,快排的时间复杂度分析,快排的优化,快排的非递归实现,快排的三路划分算法.

C/C++领域,数据结构,linux,MySQl学习者 8537

八大排序快速排序

八大排序快速排序

m0_64616651的博客 419

八大排序之快速排序的优化

四、快速排序的优化 当我们拿到这样的一组关键字序列 [1 2 3 4 5 6 7 8] 根据上面快排的思想,还是会先将1当关键字然后将序列划分成两部分,然后接着排序接着划分。。。如下图所示: 这样下来,递归的层次就会变得非常多。 数据越有序,效率越差 优化一:优化最坏情况(数据最有序的情况) 随机取基准点 void Swap(int arr[],int first, int sen...

qq_43411563的博客 375
上一篇: 【字符串匹配】KMP算法
下一篇: 【C语言数据结构】栈(顺序栈+链栈)
W1024201
博客等级 码龄5年 69粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值