package com.lamp.sort;
public class QuickSort{
public static void main(String[] args) {
int[] data = {5,3,9,2,6,1};
sort(data,0,data.length);
for (int i = 0; i < data.length; i++) {
System.out.println(data[i]);
}
}
/* 首先我要找到一个位置的数使得其左边的数字比它要小,右边的数字比它要大
开始的时候数组为5,3,9,2,6,1
首先从左端下标为++i开始扫描发现3小于5满足条件继续,发现下一个9大于5而此时i的下标值为2
不满足条件推出左端扫描的while循环,开始从最右端开始扫描,发现最右端第一个数字就小于5,此时
j的值为5,而i此时是小于j的,交换两位置数据,即一轮循环后的数据为
5,3,1,2,6,9
接着从左端开始继续扫描,当扫描到大于5的值的时候,i的值变为4即6所处位置的下标,当从右端
开始扫描时,扫描到小于5的数字时,j的值变为3,而此时i的值大于j的值不满足条件推出最外的
while循环,此时数组的数据为
5,3,1,2,6,9
然后将第一个数和j处下标的数进行互换,数组变为
2,3,1,5,6,9
这样就达到了预期的目标,即下标为3的数据大于其左边的数据且小于其右边的数据
然后以5为分割点对两边的数据用同样的原理进行排序
*/
private static void sort(int[] data, int left, int right) {
int i = left;
int j = right;
int middle = data[left]; //第一次调用时候我选取要排序的数组的第一个数作为关键数据
while(true){
while(++i<right-1 && data[i]<middle);
while(--j>left && data[j]>middle);
if(i >= j){
break;
}
swap(data,i,j);
}
data[left] = data[j];
data[j] = middle;
if(left < j){
sort(data,left,j);
}
if(i < right){
sort(data,i,right);
}
}
private static void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
}
相关推荐
基于Simulink的IEEE33节点配电网仿真实战:从建模到分布式能源集成
本文详细介绍了基于Simulink的IEEE33节点配电网仿真实战,从基础建模到分布式能源集成。通过MATLAB脚本管理参数、搭建Simulink模块,并集成风机和光伏系统,实现高效配电网仿真。文章还涵盖潮流计算、故障分析及性能优化技巧,为电力系统仿真提供实用指导。
三种快速排序以及快速排序的优化
1、快速排序的基本思想: 快速排序使用分治的思想,通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字均比另一部分记录的关键字小。之后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 2、快速排序的三个步骤: (1)选择基准:在待排序列中,按照某种方式挑出一个元素,作为 "基准"(pivot) (2)分割操作:以该基准在序列中的实际位置,把序列分成两个子序列。此时,在
KEGG数据库与KAAS工具:基因功能注释的实用指南
本文提供了使用KEGG数据库与KAAS工具进行基因功能注释的完整实用指南。详细阐述了如何从准备基因或蛋白序列开始,通过KAAS服务器获取KEGG Orthology(KO)编号,并解读注释结果。文章进一步介绍了如何利用KOBAS工具进行通路富集分析,将定性观察转化为定量洞察,并分享了提高注释准确率、处理大数据集及使用API等避坑技巧与高阶方法,为基因组学、转录组学研究者奠定坚实的数据分析基础。
经典快速排序与随机快速排序
文章目录一、经典快速排序(一)、经典快速排序的实现理论(二)、经典快速排序的代码实现(Java)(三)、经典快速排序的时间复杂度二、随机快速排序(一)随机快速排序的实现理论(二)随机快速排序的代码实现(Java)(三)、随机快速排序的时间复杂度 一、经典快速排序 (一)、经典快速排序的实现理论 经典快速排序是用数组的最后一个数(这里记为 x )进行划分。也就是 &lt;x、=x、&gt;x。 有...
ANSYS Fluent 2023R2实战:用欧拉多相流模型搞定流化床模拟(附详细参数避坑)
本文详细解析了ANSYS Fluent 2023R2中欧拉多相流模型在流化床模拟中的应用,包括模型选择、材料属性设置、相间作用力配置及初始化技巧。特别针对高颗粒浓度工况提供参数优化方案,帮助工程师提升模拟精度与效率,适用于化工、能源等领域的流化床反应器设计。
Sigrity XtractIM实战:5步搞定IC封装宽带模型提取(附BGA案例)
本文通过一个典型BGA封装案例,详细介绍了使用Cadence Sigrity XtractIM工具进行IC封装宽带模型提取的五步实战流程。内容涵盖从环境准备、参数设置、结果验证到模型导出的完整操作,重点阐述了如何利用XtractIM生成高精度、紧凑的宽带SPICE模型,以解决高速电路设计中因封装模型不准导致的信号与电源完整性问题,助力工程师提升仿真精度与设计效率。
双路快速排序
双路快速排序算法是随机化快速排序的改进版本,partition 过程使用两个索引值(i、j)用来遍历数组,将v的元素放在索引j所指向位置的右边,v代表标定值。
NotebookLM平替实测:用Open Notebook+Ollama零成本搭建私有AI知识库
本文提供了一份详细的实战指南,教你如何利用Open Notebook与Ollama,在本地零成本搭建一个功能强大且完全私有的AI知识库。通过Docker容器化部署,实现数据绝对安全、模型自由选择与离线运行,是NotebookLM等云端工具的绝佳平替方案,尤其适合注重数据隐私的教育工作者、研究者及小团队。
什么是快速排序?
文章目录快速排序快速排序简介:基本思想原理快速排序法示意图排序演示Java代码 快速排序 快速排序简介: 快速排序是对冒泡排序的一种改进。 基本思想 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都小于或者等于另外一部分的所有数据,然后再按照此方法对这两部分数据分别进行快速排序,整个排序的过程可以递归进行,以此达到整个数据变成有序序列。 原理 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选 用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所
解决[WARN] : Controller Spawner couldn‘t find the expected controller_manager ROS interface.思路
rrbot例程ros_control配置问题的解决思路 本人刚入门ROS机器人开发,在学习rrbot例程出现了control_manager无法启动的bug。 在启动rrbot_control.launch的时候,出现下列warning: [WARN] [1594362016.372059]: Controller Spawner couldn't find the expected controller_manager ROS interface. 之后再按教程的步骤 rosservice call /
Windows 11 系统部署 OpenClaw 完整指南:从零到一的 AI 助手搭建
OpenClaw(昵称“小龙虾”)是一款开源 AI 代理工具,定位为“AI 指挥官”,能够接收指令、调用工具并自动化处理任务。它支持对接国内外多款大模型,所有数据本地存储,兼顾实用性与安全性。本文将详细介绍在 Windows 11 系统上部署 OpenClaw 的完整流程。OpenClaw 在 Windows 11 上的部署虽然有一定技术门槛,但按照本文的步骤操作,大多数用户都能顺利完成安装。环境准备是基础:确保 Node.js ≥22 版本,使用管理员权限操作安装方式灵活选择。
快速排序——详解
快速排序(英语:Quicksort),又称分区交换排序(英语:partition-exchange sort),简称「快排」,是一种被广泛运用的排序算法。三路快速排序(英语:3-way Radix Quicksort)是快速排序和基数排序的混合。它的算法思想基于荷兰国旗问题的解法。内省排序(英语:Introsort 或 Introspective sort)4是快速排序和堆排序的结合,由 David Musser 于 1997 年发明。内省排序其实是对快速排序的一种优化,保证了最差时间复杂度为。
Winform从入门到精通(21)——ProgressBar(史上最全)
本介绍ProgressBar控件的详细用法,包含所有属性、事件,绝对史上最全!
图解快速排序及双路三路快速排序
前言 之前我们介绍了交换类排序中的冒泡排序,这次我们介绍另一种交换类排序叫做快速排序。快速排序的优点是原地排序,不占用额外空间,时间复杂度是O(nlogn)。 当然,对于快速排序来说,它也是有缺点的,它对于含有大量重复元素的数组排序效率是非常低的,时间复杂度会降为O(n^2)。此时需要使用改进的快速排序—双路快速排序,在双路快速排序的基础上,我们又进一步优化得到了三路快速排序。 快速排序 快速排...
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
[算法]快速排序与随机快速排序
与归并排序一样,快速排序也运用了分治策略,而随机快速排序是对快速排序的一种优化。
Data-Structures-and-Algorithm-Analysis-in-Java.pdf
作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...
手写快速排序
快速排序简介快速排序是一种很不错的排序算法,算法复杂度为n*logn。快排使用了分而治之的思想,每次排序是都找到一个基准(我们学习时经常使用第一个作为基准),然后把小于基准的元素放到基准元素的左边,大于基准的元素放到基准元素的右边,这样一次排序下来,基准元素左边都是小于(等于)基准的数,基准右边的元素都是大于(等于)基准的元素了。快速排序关键点就是找到这样一个基准并将其放到恰到的位置。算法思路定义一
分治之快速排序以及快速排序为何最快
算法思想 数组排序任务可以如下完成: 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
【快速排序】快速排序/第k个数
acwing算法学习笔记 -----快速排序
快速排序的大概流程
文章目录前言一、快速排序是什么?二、算法排序方法1.找出基准数2.在数组两端设置两个指针 i j(i在左 j在右)3.重复之前的步骤三、总结附上快速排序代码(c语言) 前言 本文主要写,快速排序算法主要步骤 一、快速排序是什么? 快速排序是对冒泡排序的一种改进,是一种被广泛使用的排序方法。 二、算法排序方法 1.找出基准数 基准数就是数列中的第一个数: 6 1 2 5 9 3 4 7 10 8 2.在数组两端设置两个指针 i j(i在左 j在右) j先出发向左,找出比基准数小的数停止,i再向右,找出比.
快速排序之三路快速排序
之前介绍了快速排序和优化版的快速排序 下面再来介绍一种 【三路快速排序】 【代码实现】 //三路快速排序 template<typename T> static void quickSort3Ways(T arr[], int n) { __quickSort3Ways(arr, 0, n-1); } template<typename T> static void
990



被折叠的 条评论
为什么被折叠?



