快速排序

快速排序及优化方案 文章目录快速排序及其优化方案1. 快速排序的流程2. 快速排序的实现时间复杂度计算3. 快速排序优化随机获取基准值进行优化3.2二路快速排序原理:思想:4. 总结 快速排序及其优化方案 1. 快速排序的流程 首先设定一个分界值,通过该分界值将数组分成左右两部分。 将大于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边,而等于分分界值的部分放在相对中间的部分。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于分界值,相对中间的部分的的数据等于分界值。 然后,左边和右边的数据可以独立排序 阅读详情

快速排序是目前所有排序中性能较好的一种算法,最好情况和平均情况下时间复杂度均为O(nlogn),最坏的情况下时间复杂度为O(n^2)。快速排序采用递归,用空间换取时间。由于使用了递归,因此需要额外的存储空间。

package sort;

import java.util.Arrays;

public class MyQuickSort {

    public static void main(String[] args) {
        int[] array = { 2, 5, 1, 4, 3, 9, 5, 1, 12 };
        System.out.println(Arrays.toString(array));
        System.out.println("--------------------------");
        quickSort(array, 0, array.length - 1);
        System.out.println("--------------------------");
        System.out.println(Arrays.toString(array));
    }

    private static void quickSort(int[] array, int low, int high) {

        int l = low;
        int h = high;

        int key = array[low];// 默认选择第0个为基数

        while (l != h) {// l跟h相等则结束
            while (l < h && array[h] >= key)// h从右向左移动,直到找到一个比基数小的值
                h--;
            if (l < h)
                swap(array, l, h);
            while (l < h && array[l] <= key)// l从左向右移动,直到找到一个比基数大的值
                l++;
            if (l < h)
                swap(array, l, h);
        }

        // 然后把数组从基数所在的位置分成两部分,分别递归
        if (l > low)
            quickSort(array, low, l - 1);
        if (h < high)
            quickSort(array, h + 1, high);

    }

    private static void swap(int[] array, int a, int b) {
        int temp = array[a];
        array[a] = array[b];
        array[b] = temp;
        System.out.println("交换下标为" + a + "和" + b + "的两个元素");
        System.out.println(Arrays.toString(array));
    }

}

运行结果如下:

[2, 5, 1, 4, 3, 9, 5, 1, 12]
--------------------------
交换下标为0和7的两个元素
[1, 5, 1, 4, 3, 9, 5, 2, 12]
交换下标为1和7的两个元素
[1, 2, 1, 4, 3, 9, 5, 5, 12]
交换下标为1和2的两个元素
[1, 1, 2, 4, 3, 9, 5, 5, 12]
交换下标为3和4的两个元素
[1, 1, 2, 3, 4, 9, 5, 5, 12]
交换下标为5和7的两个元素
[1, 1, 2, 3, 4, 5, 5, 9, 12]
--------------------------
[1, 1, 2, 3, 4, 5, 5, 9, 12]
Unity 调用安卓内部安装apk 一、申请权限 应用内安装其他应用的权限属于特殊权限,需要在特殊申请。 Uri packageURI = Uri.parse("package:" + mContext.getPackageName()); Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI); startA... 阅读详情

相关推荐

COMSOL求解器实战:如何避免非线性问题求解失败(附牛顿法调试技巧)

本文深入探讨了COMSOL求解器在处理非线性问题时常见的失败原因及解决方案。通过分析物理模型非线性特性、初始条件敏感性和求解器参数配置,提供了牛顿法调试的黄金四步法,包括模型检查、分阶段求解、参数调优和高级诊断工具应用。特别针对材料非线性、几何非线性和多物理场耦合等典型工程场景,给出了实战技巧和预防性建模策略,帮助工程师有效避免求解失败。

weixin_29284657的博客 420

数据结构习题及解析二

一、选择题1、数组的数据元素类型DataType可根据实际需要而定义。以下说法完全正确的是( )A.数组的读运算可以读取一个数据元素整体,写运算只能修改一个数据元素的一部分B.数组的读、写运算可以读取或修改一个数据元素的一部分或一个整体C.数组的读、写运算只能读取或修改一个数据元素的一部分D.数组的读、写运算只能读取或修改一个数据元素整体解析:本题考点是数组的数据元素...

2883

使用VIVADO 2019.1 搭建以太网接口

以太网 MAC+SGMII->GMII接口转换 以FPGA V7为例,搭建一个千兆以太网接口。运行环境为Vivado2019.1。板卡的FPGA V7与千兆网口芯片采用SGMII互联,最终实现FPGA与上位机之间的千兆网卡通信,实际实现时,V7采用MAC + GMII ->SGMII的结构。SGMII接口使用1G/2.5G Ethernet PCS/PMA or SGMII ip核,MAC层使用Tri Mode Ethernet MAC ip核。 由于MAC层IP不支持SGMII接口,因此需要G

qq_44641513的博客 8415

交换类排序——快速排序

交换类排序之快速排序 背景:由冒泡排序改进而得。 核心思想:通过多次划分操作实现排序。以升序为例,每一趟选择当前所有子序列中的一个关键字(默认选第一个)作为枢轴,将子序列中比枢轴小的移到枢轴左边,比枢轴大的移到枢轴右边。当本趟所有子序列都被枢轴以上述规则划分完毕后会得到新的一组更短的子序列。 算法步骤 补充 i++和++i的效率问题。CodeBlocks反汇编窗口。 时间复杂度 1.最好时间复杂度:O(nlog2n)。 待排序列越接近无序,该算法效

qq_43874188的博客 836

深入解析Flex NOC总线驱动的实时带宽与延迟优化策略

本文深入解析了Flex NOC总线驱动的核心价值与优化策略。通过解读`/proc/noc/real_time`中的实时带宽与延迟数据,并结合`sysfs`接口进行动态QoS调优,可以有效解决芯片内部数据拥堵问题。文章以智能摄像头和算力盒子的实际案例,详细说明了如何通过优先级调整、带宽限制和参数优化,提升系统在复杂任务下的实时性与稳定性。

weixin_29289821的博客 284

Unity集成阿里Qwen2.5-Omni全模态大模型实战:语音交互与多模态AI开发指南

本文详细介绍了在Unity中集成阿里Qwen2.5-Omni全模态大模型的实战指南。通过C#脚本开发,实现语音交互、图像分析等多模态AI功能,涵盖API调用、音频处理、流式响应解析等核心步骤,为游戏、虚拟人等Unity应用提供沉浸式智能交互解决方案。

weixin_29005499的博客 316

为什么说快速排序是性能最好的排序算法?

刚刚学习了排序这一章,看到了书中最后的一个总结表: 心想从表上来看,堆排序不该是最好的排序算法么?不管最好、最坏还是平均情况,时间复杂度都是O(nlogn),而且还不像快排和归并排序那样占空间,为什么说快速排序是最好的算法呢? 其实经过实验,会发现相同的数据规模,快速排序比堆排序的效率高很多,并且随着数据规模的扩大,二者的差距不断扩大,快速排序的优势越来越明显。快速排序的时间复杂度近似线性...

Maggie的博客 5万+

XCKU060光纤卡学习资料保存:基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡

基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡 一、板卡概述 本板卡系我司自主研发,基于XilinxUltraScaleKintex系列FPGAXCKU060-FFVA1156-2-I架构,支持PCIEGen3x8模式的高速信号处理板卡,搭配两路40GQSFP+接口,两组64-bitDDR4,每组容量8Gbyte,可稳定运行在2400MT/s。板卡具有自控上电顺序,BP...

3075

快速排序——排序算法中平均情况下速度最快的一种排序方法

1 概述 快速排序(quick sorting)是对气泡排序的一种改进,是关键字次数少,速度较快的一种排序方法。 2 基本思想 简单概括就是:给基准数据找到其正确的索引位置; 具体原理如下: 1)如下图所示,假设目前的基准数据是第一个,也就是元素15,用一个临时变量temp保存元素15,temp=15;然后分别用low和high记录数组的最大和最小下标。 2)首先从后往前开始扫描,如果high对...

我是张跑跑 1万+

基于PLC的冲压件自动生产线电气系统设计【附数据】

考虑到生产线的高效运行和维护简便性,选择了三菱FX系列的可编程逻辑控制器(PLC)作为核心控制单元,该型号的PLC因其高可靠性和强大的功能集,在工业自动化领域有着广泛的应用。最后,在完成初步的软件开发后,进行了多轮次的模拟测试和现场调试,逐步修正了存在的问题,最终达到了预期的功能要求。例如,对于进料环节,选用了光电传感器以精确检测物料的位置;此外,为了适应不同尺寸的工件加工需求,还特别设计了一套可调节的夹具系统,不仅提高了生产线的灵活性,同时也降低了更换模具的成本。✅ 感恩科研路上每一位志同道合的伙伴!

lagougongzuoshi的博客 1292

短视频mssdk中get_token协议逆向与加密流程深度解析

本文深度解析了短视频mssdk中get_token协议的逆向分析与加密流程。通过抓包、Frida Hook、静态分析等手段,详细拆解了协议数据的Protobuf结构、设备信息采集来源,并重点剖析了其核心加密链路:zlib压缩、自定义TEA算法与AES-CBC加密,最终实现完整的协议模拟。

flower的专栏 557

排序算法之快速排序

      相信大家也经常听到一种排序算法叫做“快排”,而且这也是很多同学经常用到的(一旦掌握了之后),因为在大家的认知中,快速排序是在平均情况下性能最好的一种排序算法,他的时间复杂度较优并且没有额外的空间开销。下面就来简单介绍一下快速排序的整体思路和实现过程,其实本篇博文只是自己的一个笔记而已,给大家推荐https://bbs.codeaha.com/thread-4419-1-1.html,这...

hnu_Cheng的博客 1225

基于单片机的按键加1数码管显示(仿真+程序)5046

1、51+Proteus8.10;2、学习计数统计、数码管显示驱动;

理论结合实践,开启你的电子学习新方案! 1326

三种快速排序以及快速排序的优化

1、快速排序的基本思想:    快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 2、快速排序的三个步骤: (1)选择基准:在待排序列中,按照某种方式挑出一个元素,作为 "基准"(pivot) (2)分割操作:以该基准在序列中的实际位置,把序列分成两个子序列。此时,在

思考,思考,再思考~ 5万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

经典快速排序与随机快速排序

文章目录一、经典快速排序(一)、经典快速排序的实现理论(二)、经典快速排序的代码实现(Java)(三)、经典快速排序的时间复杂度二、随机快速排序(一)随机快速排序的实现理论(二)随机快速排序的代码实现(Java)(三)、随机快速排序的时间复杂度 一、经典快速排序 (一)、经典快速排序的实现理论 经典快速排序是用数组的最后一个数(这里记为 x )进行划分。也就是 &amp;lt;x、=x、&amp;gt;x。 有...

liyanan的博客 3041

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

双路快速排序

双路快速排序算法是随机化快速排序的改进版本,partition 过程使用两个索引值(i、j)用来遍历数组,将v的元素放在索引j所指向位置的右边,v代表标定值。

fangfan9的博客 2377

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

什么是快速排序?

文章目录快速排序快速排序简介:基本思想原理快速排序法示意图排序演示Java代码 快速排序 快速排序简介: 快速排序是对冒泡排序的一种改进。 基本思想 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都小于或者等于另外一部分的所有数据,然后再按照此方法对这两部分数据分别进行快速排序,整个排序的过程可以递归进行,以此达到整个数据变成有序序列。 原理 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选 用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所

热爱编程的菜鸟 5605

快速排序——详解

快速排序(英语:Quicksort),又称分区交换排序(英语:partition-exchange sort),简称「快排」,是一种被广泛运用的排序算法。三路快速排序(英语:3-way Radix Quicksort)是快速排序和基数排序的混合。它的算法思想基于荷兰国旗问题的解法。内省排序(英语:Introsort 或 Introspective sort)4是快速排序和堆排序的结合,由 David Musser 于 1997 年发明。内省排序其实是对快速排序的一种优化,保证了最差时间复杂度为。

w_w_wwwww的博客 1375

图解快速排序及双路三路快速排序

前言 之前我们介绍了交换类排序中的冒泡排序,这次我们介绍另一种交换类排序叫做快速排序。快速排序的优点是原地排序,不占用额外空间,时间复杂度是O(nlogn)。 当然,对于快速排序来说,它也是有缺点的,它对于含有大量重复元素的数组排序效率是非常低的,时间复杂度会降为O(n^2)。此时需要使用改进的快速排序—双路快速排序,在双路快速排序的基础上,我们又进一步优化得到了三路快速排序。 快速排序 快速排...

子居的博客 1193

[算法]快速排序与随机快速排序

与归并排序一样,快速排序也运用了分治策略,而随机快速排序是对快速排序的一种优化。

hula_hula_的博客 1635

手写快速排序

快速排序简介快速排序是一种很不错的排序算法,算法复杂度为n*logn。快排使用了分而治之的思想,每次排序是都找到一个基准(我们学习时经常使用第一个作为基准),然后把小于基准的元素放到基准元素的左边,大于基准的元素放到基准元素的右边,这样一次排序下来,基准元素左边都是小于(等于)基准的数,基准右边的元素都是大于(等于)基准的元素了。快速排序关键点就是找到这样一个基准并将其放到恰到的位置。算法思路定义一

God Liao On The Way 1万+

分治之快速排序以及快速排序为何最快

算法思想 数组排序任务可以如下完成: 1)设k=a[0],将k挪到适当位置,使得比k小的元素都在k的左边,比k大的元素都在k的右边,和k相等的,不关心在k左右出现均可(O(n)时间完成) 2)把k左边的部分快速排序 3)把k右边的部分快速排序 (假设运气比较好,每次基准元素被移动到中间,这样的话时间复杂度为O(nlogn)) 如何在O(n)的时间内将数组分成两半,一般在小于基准值,一般大于基准值? 程序代码 #include<iostream> using namespace std; int

Java硬件工程师的博客 3190

【快速排序】快速排序/第k个数

acwing算法学习笔记 -----快速排序

青竹雾色间.的博客 1998
上一篇: JAVA获取IP
下一篇: JAVA线程池
sunbufu
博客等级 码龄11年 17粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值