快速排序 回顾

快速排序 python实现代码 function quick_sort(s, _begin, _end) if _begin < _end then i = _begin j = _end pivot = s[j] while i < j do while(i < j and s[i] <= pivot) do i = i + 1 end if i < j then s[j] = s[i] end while(i < j and s[j] >= pivot) do j = j - 1 end if i < j then s[i] = s[j] end end s[j] = pivot; quick_sort(s, _begin, i - 1) quick_sort(s, i + 1, _end) end end function prints (s) local tmp = '' for i = 1,#a do tmp = tmp..a[i].." " end print(tmp) end a = {11,5,25,8,2,95,10,7} quick_sort(a,1,#a) prints(a) 立即下载
快速排序由C. A. R. Hoare在1960年提出。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,
然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。

 

(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。 [2] 
(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。 [2] 
(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 [2] 
(4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

回顾一下快速排序代码: 

#include<cstdio>
#include<iostream>
using namespace std;

int partition(int a[] , int left , int right) {
	//保存动态变化的左、右索引位置 
	int l = left;
	int r = right;
	//定义中枢轴 
	int pivot = a[l]; 
	while(l < r) {
		while(l < r) {
			if(a[r] < pivot) {
				a[l] = a[r]; 
				l++;
				break;
			} else {
				r--;
			}
		}
		while(l < r) {
			if(a[l] > pivot) {
				a[r] = a[l]; 
				break;
			} else {
				l++;
			}
		}
	}
	//这个时候l==r 
	a[l] = pivot;
	return l;
}

void quickSort(int a[] , int left , int right) {
	if(left < right) {
		int parti = partition(a , left , right);
		quickSort(a , left , parti-1);
		quickSort(a , parti+1 , right);
	} 
}
int main() {
	int a[] = {5,4,7,2,9,1,77};
	int n = 7;
	quickSort(a , 0 , n-1);
	for(int i=0;i<n;i++) cout<<a[i]<<" "; 
	return 0;
} 
理想的情况是,每次划分所选择的中间数恰好将当前序列几乎等分,经过log2n趟划分,便可得到长度为1的子表。这样,整个算法的时间复杂度为O(nlog2n)。 [4] 
最坏的情况是,每次所选的中间数是当前序列中的最大或最小元素,这使得每次划分所得的子表中一个为空表,另一子表的长度为原表的长度-1。这样,长度为n的数据表的快速排序需要经过n趟划分,使得整个排序算法的时间复杂度为O(n2)。


我理解、总结的:
1.理想情况:每次划分,中枢轴最终的位置落在几乎折半的位置。则为经过log2n趟划分。时间复杂度为O(nlog2n)。
2.最坏情况:每次划分,中枢轴最终的位置落在当前范围的第一个或最后一个元素,则左区间或右区间其中有一个为空,则为经过n趟划分。时间复杂度为O(n^2)。

 

Spacedesk保姆级教程:用旧平板给Windows电脑当副屏,从安装到避坑一步到位 本文提供Spacedesk保姆级教程,教你如何将旧平板变成Windows电脑的副屏,从软件安装到网络配置、显示优化及声音交互,一步步避开常见陷阱。通过WiFi实现扩展屏功能,支持4K分辨率和60Hz刷新率,让闲置设备焕发新生。 阅读详情

相关推荐

手把手教你用示波器搞定PCIe 5.0 REFCLK时钟信号测量(附完整参数解读)

本文详细介绍了如何使用示波器进行PCIe 5.0 REFCLK时钟信号测量,包括示波器与探头的选择、关键参数的测量方法及解读,以及实战中的常见问题与解决方案。通过手把手教学和完整参数解读,帮助硬件工程师高效完成时钟信号测量,确保系统稳定性。

weixin_28704565的博客 359

排序算法之四——快速排序

前言 快速排序(Quicksort)是对冒泡排序的一种改进。 介绍 快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 快速排序采用了一种分治的策略,通常称其为分治法(Divi...

云祁QI 1512

告别手动输入!用Burp插件+ddddocr,5分钟搞定图片验证码自动识别

本文详细介绍了如何利用Burp插件和ddddocr开源库快速构建图片验证码自动识别系统,实现高效、零成本的验证码自动化解决方案。通过环境搭建、性能调优和Burp Suite深度集成,显著提升安全测试效率,特别适用于金融和电商系统的批量测试场景。

weixin_29099217的博客 202

快速排序算法详解(原理,时间复杂度,实现代码)

快速排序只是使用数组原本的空间进行排序,所以所占用的空间应该是常量级的,但是由于每次划分之后是递归调用,所以递归调用在运行的过程中会消耗一定的空间,在一般情况下的空间复杂度为 O(logn),在最差的情况下,若每次只完成了一个元素,那么空间复杂度为 O(n)。此时以基准数6为分界点,6左边的数都小于等于6,6右边的数都大于等于6。快速排序是在冒泡排序的基础上改进而来的,冒泡排序每次只能交换相邻的两个元素,而快速排序是跳跃式的交换,交换的距离很大,因此总的比较和交换次数少了很多,速度也快了不少。

lmdanran的博客 1万+

应急响应靶场练习Linux-web-2

本次应急响应靶机采用的是知攻善防实验室的Linux-2应急响应靶机靶机下载地址为:相关账户密码: root/Inch@957821.(第一个为大写的i,记住要带最后的点.)1.该攻击者的IP为192.168.20.12.攻击方式应该是通过/index.php?user-app-register上传了一个webshell,然后使用蚁剑管理webshell之后再次上传version2.php进行提权.3.攻击者修改了phpmyadmin数据库的管理员密码。

tddkett的博客 2801

01、【solidworks】windosws正在配置solidworks问题及注册表未卸载干净问题解决

windosws正在配置solidworks问题及注册表未卸载干净问题解决

qq_740388770的博客 2万+

数据结构-随机化快速排序

快速排序由 C. A. R. Hoare 在 1960 年提出。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

weixin_45953332的博客 853

基于深度学习的目标检测在 Android 端的优化实现:YOLO Mobile × NPU 加速实战教程

随着国产手机芯片日益强大,终端侧的目标检测任务已经具备实用性基础。本文围绕实际工程场景,详细讲解如何在 Android 应用中部署轻量级目标检测模型(如 YOLO Mobile、EfficientDet Lite),并结合国产手机 NPU 能力,实现高性能、低延迟、实时目标检测系统。文章将涵盖从模型选择、结构优化、量化转换到 Android 上推理加速、UI 实时渲染的全链路工程路径,强调每一环节的真实可复现性与部署细节,适合 AI 工程师、移动开发者及企业级应用落地团队参考使用。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1410

排序——快速排序(Quick sort)

概况 快速排序(Quick sort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。 算法思路 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 快速排序算法通过多次比较和交换来实现排序,其排序流程如下: ......

努力中的老周的专栏 32万+

基于英特尔 RealSense D455 相机实现裂缝尺寸以及深度测量

D455 相机可用于对这些零部件进行高精度的表面检测,快速准确地测量裂缝的尺寸和深度,实现自动化的质量控制和缺陷筛查,提高生产效率和产品质量。D455 相机能够对焊缝表面进行细致扫描,测量焊缝的宽度、深度以及焊缝表面的不规则程度等参数,帮助检测焊缝是否存在缺陷,如未焊透、焊瘤等,为焊接质量的评估和改进提供数据支持。:RGB 传感器采用全局快门,并且其视场与深度视场相匹配,能够提供更出色的 RGB 图像质量,以及深度图像和 RGB 图像之间的更好对应性,从而可提高扫描质量。可以看出宽度和高度都是十分准确的。

qq_53545309的博客 1715

老款 NUC 复活计划:装 Ubuntu 部署 OpenClaw 本地 AI

老款 NUC 变身本地 AI 服务器指南 本文详细介绍了如何将老旧华硕 NUC 设备改造为本地 AI 服务器。主要内容包括: 硬件评估:列出老款 NUC 的最低配置要求(i3 6代/8GB内存/256GB SSD),并提供兼容性检查命令和性能预期表 系统准备:指导备份数据、下载 Ubuntu 22.04 LTS 和制作启动盘的方法(Windows/Linux双平台) 安装流程:从 BIOS 设置到 Ubuntu 安装的完整步骤,包括推荐的分区方案 系统优化:禁用不必要的服务、内核参数调优、Swap 配置和

博客 7608

快速排序

快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 def quicksort(arr): if len(arr) <= 1: ...

s1421578048的博客 328

地统计插值学习心得(一)

(创建地统计图层工具用于根据现有的地统计图层或者地统计模型来创建包含新要素数据集的地统计图层,也就是使用构建好的地统计模型用到新的数据集中)这表明,远离极值的区域预测不受极值的影响,并且还表明,包括极值会导致钼元素浓度高的区域周围的预测明显变高。通常,我们使用同一个数据集进行建模和预测,但是在实际插值过程中,这两步的数据可以是不同的,这就是处理极值的诀窍。如果你的数据集有无法忽略的极值时(比如这些钼元素浓度),一种常见的方法是首先显式移除极值进行建模,然后在预测中使用整个数据集(包括极值)。

JData_Engineer的博客 287

快速排序基准数字为中间_快速排序回顾总结--算法篇

随着在工作中,代码量的累积,才逐渐觉察到算法和数据结构的重要性,而在大学学习的算法和数据结构知识,也已经逐渐模糊,所以计划着回顾下之前关于算法的知识,顺便做个总结,以便日后参考提升。 首先回顾下比较知名度比较高的“快速排序”吧。它是基于对“冒泡排序”的一种改进,但是要比冒泡排序要高效的多,并且其中运用了分治和递归的思想。它和冒泡排序一样,也属于“交换排序”,通过元素之间的比较...

weixin_34393451的博客 1258

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

快速排序回顾

在循环中我们进行当前元素与基准元素的判断,如果小于说明当前元素应该在小于区域,这时候需要将当前元素交换到小于区域中,同时小于区域的右边界++,i++并且lt位置的元素是基准,因为i是从l+1开始的,基准的开始为l,那么只有在第一个if中涉及到交换基准,而之后i的位置都会在基准的后一个位置。我们看一下交换的本质,当前元素大于基准的情况下,先将当前元素与gt位置元素进行交换之后gt-1,因此gt之后的元素都是大于基准元素的。而当前元素小于基准的情况下,当前元素与lt交换,因此lt位置之前的元素都是小于基准的。

weixin_54143563的博客 488

VB摄像头监控

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

回顾快速排序

回顾快速排序

2301_77479435的博客 723

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

快速排序的一次再回顾

『快速排序的描述』 快排主要是采用了分而治之的思想。 分解:数组A[]被划分两个(可能为空)子数组A[]和A[],使得A[]中的每一个元素都小于等于A[ ],而A[ ]也小于等于A[]中的每个元素。其中,计算下标q也是划分过程的一部分。 解决:通过递归调用快速排序,对子数组A[]和A[]进行排序。 合并:因为子数组都是原址排序的,所以不需要合并操作:数组A[ ...

Miserable_ccf的博客 277

算法回顾——快速排序

快速排序(quickSort),一种典型的运用分治思想的算法。 核心思想是: 在数组中取一个元素作为关键的中间值keyVal。 然后把比中间值小的元素,放到中间值的左边;把比中间值大的元素,放到中间值右边。 在中间值keyVal的左半边和右半边两个子列表中,重复上面的操作。把一个数组的排序,拆分成多个规模更小的问题,逐一解决,分而治之,这就是分治了; 语言描述,我们很好懂。但是怎么转换成代码实...

China_Style的专栏 274

快速排序回顾及相关题型

这里先假设数组下标从 1 开始,后续程序实现时可以通过 k - 1 来对齐下标从 0 开始的数组。设计一个算法,找出数组中最小的k个数。:递归调用左右两个区间,对左右两个区间进行快速排序。将所有的数按照此法分成左右两个区间。:对于快速排序,合并操作无需单独进行。,证明比较繁琐,可以参考《算法导论》请注意,你需要找的是数组排序后的第。,证明比较繁琐,可以参考《算法导论》个最大的元素,而不是第。:合并操作无需单独进行。:合并操作无需单独进行。的右边,并得到基准元素。的右边,并得到基准元素。

qq_45931691的博客 1066

基础算法 第六课——快速排序(回顾)

首先设定一个分界值,通过该分界值将数组分成左右两部分。 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。 然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。

阿巴阿巴 586

快速排序(回顾)

对快速排序思想的探究

wd772510387的博客 77

回顾一下“快速排序”

<br />为了巩固以前学过的知识,复习一下排序算法,加深对其的了解,总结一下:<br /> <br /> <br />快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。<br />    假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到

xum2008的专栏 575

经典算法回顾之快速排序【交换排序】

算法思想:   快速排序采用的思想是分治思想。   快速排序是找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正确位置,排序完成。所以快速排序算法的核心算法是...

diezhuan0712的博客 171

回顾>>JAVA[快速排序算法]原理附实现代码

快速排序,核心思想是把一串数字通过随机取的一个KEY划分为左边和右边的两部分,左边的都小于KEY右边的都大于KEY 1.递归函数需要三个值,一个是排序的数组,一个是起始值start,还有一个是你需要排序到的最后一个我们就叫end 2.第一次进入函数,start为0,end为数组长度-1,再拟定一个key为数组的第一个值,就是arr[start] 3.然后从右边开始一个一个和key经行比较,如果是比...

Lpf的博客 4354

排序回顾---快速排序

简述 快速排序是一种排序执行效率很高的排序算法,它利用分治法来对待排序序列进行分治排序,它的思想主要是通过一趟排序将待排记录分隔成独立的两部分,其中的一部分比关键字小,后面一部分比关键字大,然后再对这前后的两部分分别采用这种方式进行排序,通过递归的运算最终达到整个序列有序,下面我们简单进行阐述。 快排思路 我们从一个数组来逐步逐步说明快速排序的方法和思路。 思路 假设我们对数组{7, 1, 3, 5, 13, 9, 3, 6, 11}进行快速排序。 首先在这个序列中找一个数作为基准数,为了方便可以取第一个

破浪会有时的博客 163
上一篇: 最大回文子串DP
下一篇: 冒泡排序 回顾
ଳxin
博客等级 码龄8年 83粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值