交换排序之快速排序

快速排序的实现(c++版 输出交换次数 copy次数) 快速排序 实验要求:使用快速排序,输出排序好的序列以及copy的次数、比较的次数 实验说明:因为没有用到swap对数组进行交换,仅仅是对将数字copy到坑位中,所以是copy版本的快速排序。 快速排序的思路 一个数字一个坑位,假设一个有5位数字的数组__34512__,那就是5个坑位。设定第一个数为比较的基准值,所以数组中所有的数字都跟3比较,比3大的就去后面的坑位,比3小的就去前面的坑位。 一前一后两个指针,设为a和b,一个指向第一个数字,一个指向最后一个数字。 先让指针b移动,如果b指向的数字 阅读详情

1.快速排序的基本介绍

快速排序(QuickSort)是对冒泡排序的一种改进。基本思想:通过一趟排序将要排序的数据分隔成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行。

2.快速排序的示意图

在这里插入图片描述

3.代码分析

@Test
public void testSort(){
    //我们来测一下各种排序速度
    int[] array = new int[100000];
    for (int i = 0; i < array.length; i++) {
        array[i] = (int) (Math.random()*100000);
    }
    long start = System.currentTimeMillis();
    //bubbleSorting(array);//冒泡排序排序100000个数总耗时17984毫秒
    //selectSorting(array);//选择排序排序100000个数总耗时3203毫秒
    //insertSorting(array);//直接插入排序100000个数总耗时1109毫秒
    //shellSortByExchange(array);//希尔的交换排序100000个数总耗时7829毫秒
    //shellSortByMove(array);//希尔的移动排序100000个数总耗时16毫秒
    quickSort(array,0,array.length-1);//快速排序的移动排序100000个数总耗时31毫秒
    long end = System.currentTimeMillis();
    System.out.println("总共耗时:"+(end-start));
}
/**
 * 快速排序
 * @param array 要排序的数组
 * @param left 数组的左下标
 * @param right 数组的又下标
 */
public void quickSort(int[] array, int left, int right) {
    //左指针
    int l = left;
    //右指针
    int r = right;
    //得到基准数据
    int temp = array[left];
    //while循环的目的是找到基准数据再数组中的
    //正当位置
    while (l < r) {
        //当队尾的元素大于基准数据的时候,向前移动右指针
        while (l < r && array[r] >= temp) {
            r--;
        }
        //如果队尾的元素有小于temp的,就把他赋值给array[l]
        array[l] = array[r];
        //当队首的元素小于基准数据的时候,向后移动左指针
        while (l < r && array[l] <= temp) {
            l++;
        }
        //如果队首的元素有大于temp的,就把他赋值给array[r]
        array[r] = array[l];
    }
    //当l==r时,就找到了temp的正当位置
    array[l] = temp;
    //向左递归
    if (left < l-1) {
        quickSort(array,left,l-1);
    }
    //向右递归
    if (right > r+1) {
        quickSort(array,r+1,right);
    }
}
【数据结构】交换排序—冒泡排序、快速排序 交换排序的基本思想是两两比较待排序记录的关键字,若两个记录的次序相反则交换这两个记录,直到没有反序的记录为止。 阅读详情

相关推荐

【排序】交换类排序—冒泡排序、快速排序手撕图解

交换类排序——冒泡排序、快速排序详解。无论是日后面试还是笔试的,排序在数据结构与算法中有着举足轻重的地位,所以还是决定把数据结构这个专题好好写写,多研究研究!今天和大家一起学习**交换类排序**——冒泡和快排详解! 在排序中,**冒泡和快排是考察最多**的了,当然在实行上面`冒泡要相比快排简单很多`。理解起来也算得上是最简单的排序算法,而快排的话很多面试笔试都是**要求手撕**的,所以重要性不言而喻!

bigsai 8607

数据结构学习笔记——交换排序(冒泡排序和快速排序)

交换排序通过两两比较待排序的元素,若不满足排序要求则进行交换,直到整个序列有序为止。 # 一、冒泡排序 ## (一)排序思想 按照一定的次序(从前往后或从后往前,对应递减和递增)两两比较相邻的元素,若为逆序(r[i-1]r[i+1]),则进行交换,直到整个序列都比较完结束,即第一趟冒泡排序结束【第一趟冒泡排序后有一个最小或最大的元素放在排序的最终位置】。然后,继续进行下一趟冒泡排序,之前确定的最小或最大元素则不参与排序比较,第二趟后同样,序列中有一个最小或最大的元素放在排序的最终位置,

小宇y的博客 4083

java编写的快排算法

java程序编写的快排算法quicksort算法

排序——交换排序

前面我们讲了直接插入排序和希尔排序这两种插入排序,以及直接选择排序和堆排序这两种选择排序。如果还有什么问题就请点击下面的链接插入排序选择排序那么今天我们就来讲一讲交换排序。

zdlynj的博客 2596

Akamai移动端Sensor数据采集与BMP风控机制深度解析

本文深度解析了Akamai在移动端风控中的核心机制,重点阐述了Sensor数据如何通过采集陀螺仪、加速度计等硬件信息,结合设备指纹生成连续且符合物理规律的行为轨迹。详细剖析了数据从采集、加密校验到通过BMP风控三重验证(校验位、时间差、数据逻辑)的完整流程,并提供了从模拟优化到自建风控模型的实用应对思路。

quiet的专栏 290

Qt Tab Widget 实战:如何打造一个可动态增删的标签页管理器(附完整代码)

本文深入探讨了使用Qt框架中的Tab Widget控件构建动态标签页管理器的实战方法。通过分析动态增删的核心挑战,提供了完整的C++代码示例,涵盖信号槽机制、页面生命周期管理、上下文菜单实现以及状态持久化等关键功能,帮助开发者打造高效、用户友好的桌面应用界面。

bb456的博客 1046

“深入理解”—交换排序算法

基于交换的排序算法有两种:冒泡排序和快速排序 1、冒泡排序(Bubble Sort)算法描述:比较相邻两个元素的大小,如果反序,则交换。若按升序排序,每趟将数据序列中的最大元素交换到最后位置,就像气泡从水里出来一样。 举例如下: //冒泡排序 public static void bubblesort(int[] a) { boolean flag...

weixin_34122604的博客 478

张正友标定法-MATLAB实验

该方法最早由微软研究院的Zhengyou Zhang教授提出,1998年发表在IEEE TRANSACTIONS ON PATTERNANALYSIS AND MACHINE INTELLIGENCE,论文题目为:AFlexible New Technique for Camera Calibration。 (一)标定平面到图像平面的单应性 单应性(homography):在计算机视觉中被定义

qq_37845624的博客 8290

排序(3)之交换排序

今天小编给大家带来交换排序的内容,对于交换排序中的快速排序在理解上会相对困难一点,小编这里会配合图片给大家细细讲解。那么现在就开始我们今天的主题。1.时间复杂度:O(N^2)2. 空间复杂度:O(1)3. 稳定性:稳定。

weixin_68624665的博客 1231

非华为电脑也能用!华为电脑管家完美安装教程来了

GitHub 上有一个开源项目 ​****​,专门解决“非华为设备无法安装华为电脑管家”的问题。它通过智能模拟 + DLL 劫持技术,绕过官方对硬件型号的检测,让你在联想、戴尔、华硕甚至 DIY 主机上也能流畅使用华为电脑管家!⭐ 项目已获 ​700+ Stars​,社区活跃,持续更新,兼容性优秀!科技不该有围墙。如果你成功在非华为电脑上跑起了 PCManager,欢迎在评论区晒出你的设备型号 + 使用体验!也别忘了把这篇推文分享给同样“眼馋”华为生态的朋友 ~📱 ​关注我们。

程序员朱永胜 4937

手把手带你实现DAF-Net:零代码基础入门红外与可见光图像融合(从理论到实战)

本文介绍了红外与可见光图像融合技术及DAF-Net网络的应用。红外图像能捕捉热源但缺乏细节,可见光图像纹理丰富但在低光环境下表现不佳。DAF-Net采用双分支特征提取和动态注意力融合架构,能智能分配特征权重实现优势互补。文章详细讲解了环境配置、数据集准备(如TNO数据集)和预处理方法,并提供了DAF-Net的核心代码实现,包括特征提取、注意力融合和图像重建模块。通过该技术可在安防、自动驾驶等领域获得更优质的融合图像,提升视觉感知能力。

m0_71589036的博客 232

几种重要的排序算法——交换排序

插入排序 2.交换排序 所谓交换,是指根据序列中两个关键字比较的结果来对换这两个关键字在序列中的位置。交换排序本文介绍两种,冒泡排序(bubble sort)和快速排序。 1. 冒泡排序 排序思路:每次比较两个相邻的元素,如果它们的顺序不符合既定的排序规则(本文以从小到大升序为既定正序),即前一个的元素值大于后一个的元素值时交换这两个元素。例:  我们需要将 11 1 8 5 这四个数从小到大进行排序,即越大的数排在越后边。首先比较第一位和第二位的大小,第一位是“11”,第二位是“1”,“11”要

five_east_west的博客 8902

【NodeRed】node-red-contrib-opcua实现PLC读写

在之前的博文【Node-RED】node-red-contrib-opcua-server模块使用(1)中,我们介绍了用node-red-contrib-opcua-server模块实现OPCUA服务端的,以及二次开发的内容。本节博文中我们采用官方社区自带的node-red-contrib-opcua组件开展对OPCUA客户端的介绍,详细阐述用该组件中OpcUa-Client节点实现客户端对PLC的读写,以及实现过程中遇到的问题。由于官方社区中并没有找到该组件的介绍实例,这也是本博文编写的第1个原因。

weixin_48618536的博客 960

快速排序的交换次数

【问题描述】 快速排序(quick sort)是对冒泡排序的一种改进,改进的着眼点是:在冒泡排序中,记录的比较和移动是在相邻位置进行的,记录每次交换只能后移一个位置,因而总的比较次数和移动次数较多。在快速排序中,记录的比较和移动从两端向中间进行,值较大的记录一次就能从前面移动到后面,值较小的记录一次就能从后面移动到前面,记录移动的距离较远,从而减少了总的比较次数和移动次数。快速排序算法的基本思想如...

weixin_44034024的博客 8776

【Java面试题汇总】Spring篇(2026版)

IoC、DI、aop、事务、为什么不建议@Transactional、事务传播级别、@Autowired和@Resource注解的区别、BeanFactory和FactoryBean的区别、Bean的作用域,以及默认的作用域、Bean的生命周期、循环依赖、三级缓存、

种一棵树最好的时间是十年前,其次是现在 7376

1、开启 Microsoft Power Automate 自动化之旅

本文介绍了 Microsoft Power Automate 的基本概念和其在信息时代自动化需求中的重要作用。Power Automate 是 Power Platform 的一部分,能够通过无代码/低代码的方式自动化处理重复性任务,例如邮件处理、文件复制等,从而提升工作效率。文章还详细讲解了 Power Automate 的核心术语、登录方式、创建第一个流程的操作步骤,并通过示例帮助用户快速上手。无论是终端用户还是管理员,都可以通过本文了解如何利用 Power Automate 实现业务流程自动化。

corn8的博客 169

常见排序算法之交换排序——冒泡排序、快速排序

​ 哈喽大家好,我是保护小周ღ,本期为大家带来的是常见排序算法中的交换排序,主要有冒泡排序,快速排序,快排分享了三种算法:挖坑法,左右指针法,前后指针法,以及两种优化方式:解决快排最坏情况的“三数取中”,避免递归次数过多的"小区间优化",包您一看就会,快来试试吧~ ​......

保护小周ღ的博客 3985

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

(3)交换排序之快速排序

title: (3)交换排序之快速排序 date: 2019-03-12 13:00:00 +0800 update: 2019-03-12 13:00:00 +0800 author: me cover: http://ww1.sinaimg.cn/large/006jIRTegy1g17bc4qzxuj31kw11xne5.jpg preview: 快速排序是一个知名度极高的排序算法,对大...

suveng's blog 601

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

交换排序与快速排序

3、在走的过程中,若end遇到小于key的数,则停下,begin开始走,直到begin遇到一个大于key的 数时,将begin和right的内容交换,end再次开始走,如此进行下去,直到begin和end最终相遇,此 时将相遇点的内容与key交换即可。基本思想: 所谓交换,就是根据序列中元素值进行比较,根据比较结果对两个数据进行位置的相互交换序列中的位置,交换特点:将键值大的元素向序列尾部移动或将键值小的元素向序列的前部移动。4.此时key的左边都是小于key的数,key的右边都是大于key的数。

h3286918168的博客 1001

交换排序——快速排序

快速排序概念。c语言库函数qsort。库chrono。

m0_73693552的博客 639

交换排序 (冒泡排序 && 快速排序)

1、冒泡排序 ???? 核心思想 ????   所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 ❗ 冒泡排序的特性总结:❕   1️⃣ 冒泡排序是一种非常容易理解的排序   2️⃣ 时间复杂度:O(N^2)   3️⃣ 空间复杂度:O(1)   4️⃣ 稳定性:稳定 ❗ 动图演示:❕ ???? 实现代码 : void Swap(int* px, int* py) { int temp =

DanceBit的博客 2万+

交换排序——冒泡排序与快速排序

交换排序冒泡排序快速排序小结 交换排序基本思想是:两两比较待排序列记录的关键码,发现记录逆置则进行交换,直到没有逆置对为止。冒泡排序和快速排序是典型的交换排序算法。 冒泡排序 冒泡排序与直接插入排序也许是生活中我们最常用的排序方法,冒泡排序由两层嵌套循环构成:外层循环每次确定一个位置,内层循环相对于外层,从相反方向与相邻元素两两比较,直到外层当前位置,继而得出对应的值。 动态演示图如下: 代...

Flash~ 1393

交换排序(冒泡排序,优化冒泡排序,快速排序,以及快速排序优化的三种方法详解)

交换排序:利用交换元素的位置进行排序的方法称为交换排序。常用的交换排序有冒泡排序和快速排序。 冒泡排序算法: 基本思想:n个元素,序列进行N-1次循环,依次比较相邻两个元素的大小,如果array[i]&gt;array[i+1],则交换两个元素,反之则不交换。这样每次循环都能比较出数值最大的那个元素。 最好最坏情况: 最好情况是正序,时间复杂度是O(N),比较次数为n-1次 ...

suoyudong的博客 1965

交换排序之(冒泡排序和快速排序)

交换的意思是根据两个关键字值的比较结果,不满足次序要求时交换位置。冒泡排序和快速排序是典型的交换排序算法,其中快速排序是目前最快的排序算法。

weixin_45833112的博客 1086

【算法】排序——选择排序和交换排序(快速排序)

排序第二弹!超详解的选择排序和交换排序!!!

qq_55119554的博客 1232

交换排序之冒泡排序和快速排序

交换排序 利用交换元素的位置进行排序的方法称作交换排序 交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。 常用的交换排序的方法:冒泡排序和快速排序 冒泡排序 冒泡排序原理:冒泡排序其实就是从头开始对整个数列里面的元素进行两两对比,比较大的元素放到后面,接着进行对比,直到最大的一个元素被提取出来放到整个数列的最后。接着再对剩下的元素进行相同的操作,直到整...

Damn_Yang的博客 1150
上一篇: 插入排序之希尔排序
下一篇: 归并排序
suixinghero
博客等级 码龄7年 10粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值