/**
* 题目:
* 对以下数组进行从小到大的排序
* 6 1 2 7 9 3 4 5 10 8
* */
/**
* 快速排序解法:
* 以6为基准数,从右边找比6小的数字,找到后再从左边找比6大的数字,都找到后,两者交换位置;
* 当右边指向的数和左边指向的数相遇时,将该数与基准数交换位置,再对基准数左边的数进行相同的处理,
* 然后对基准数右边的做相同的处理即可
* */
/**
* 引用博主 MoreWindows 的白话经典:
* 原文链接:http://blog.youkuaiyun.com/morewindows/article/details/6684558
* 1.先从数列中取出一个数作为基准数。
* 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
* 3.再对左右区间重复第二步,直到各区间只有一个数。
* */
public class QuickSort {
public int AdjustArray(int s[], int l, int r) // 返回调整后基准数的位置
{
int i = l, j = r;
int x = s[l]; // s[l]即s[i]就是第一个坑
while (i < j) {
while (i < j && s[j] >= x)// 从右向左找小于x的数来填s[i]
j--;
if (i < j) {
s[i] = s[j]; // 将s[j]填到s[i]中,s[j]就形成了一个新的坑
i++;
}
while (i < j && s[i] < x)// 从左向右找大于或等于x的数来填s[j]
i++;
if (i < j) {
s[j] = s[i]; // 将s[i]填到s[j]中,s[i]就形成了一个新的坑
j--;
}
}
s[i] = x;// 退出时,i等于j。将x填到这个坑中。
return i;
}
public void quick_sort1(int s[], int l, int r) {
if (l < r) {
int i = AdjustArray(s, l, r);// 先成挖坑填数法调整s[]
quick_sort1(s, l, i - 1); // 递归调用
quick_sort1(s, i + 1, r);
}
}
// 快速排序
public void quick_sort(int s[], int l, int r) {
if (l < r) {
// Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = r, x = s[l];
while (i < j) {
while (i < j && s[j] >= x)// 从右向左找第一个小于x的数
j--;
if (i < j)
s[i++] = s[j];
while (i < j && s[i] < x)// 从左向右找第一个大于等于x的数
i++;
if (i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
public static void main(String[] args) {
QuickSort quick = new QuickSort();
int s[] = {6,1,2,7,9,3,4,5,10,8};
quick.quick_sort(s, 0, s.length-1);
for (int i : s)
System.out.print(i + " ");
}
}
相关推荐
【ERROR】ERROR1: PROJ: proj_create_from_database: Cannot find proj.db - 环境变量配置与路径修复指南
本文详细解析了地理空间数据处理中常见的【ERROR】ERROR1: PROJ: proj_create_from_database: Cannot find proj.db 错误。该错误的根源是PROJ库无法定位其核心数据文件proj.db。文章提供了从问题诊断到修复的完整指南,包括如何在不同系统(Windows/macOS/Linux)和安装方式(Conda/pip/源码编译)下找到正确的proj.db文件路径,并通过设置PROJ_LIB环境变量(临时、代码内或永久)彻底解决问题,同时给出了进阶排查技巧和
《啊哈!算法》第一章 - 第二节 - 冒泡排序(Java实现)
《啊哈!算法》第一章 - 第二节 - 冒泡排序(Java实现)冒泡排序冒泡排序的升序排序冒泡排序的降序排序 冒泡排序 冒泡排序的基本思想:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。 举个例子: 将 12 35 99 18 76 这 5 个数进行从大到小的排序 既然是从小到大排序,那肯定就是越小越靠后了。 首先比较第 1 位和第 2 位数字的大小,现在第 1 位是 12,第 2 位是 35。发现 12 比 35 要小,因为我们希望越小越靠后嘛,因此需要交换这两个数字的位置。交换之后这 5
别再到处找模型了!手把手教你将TI、ADI官网的SPICE模型导入LTspice(附路径避坑指南)
本文详细介绍了如何将TI、ADI官网的SPICE模型导入LTspice的全流程,包括模型获取、路径配置、符号生成等关键步骤,并提供了路径避坑指南。通过实战案例和技巧分享,帮助电子工程师高效利用外部元器件模型进行电路仿真,提升设计效率。
【坐在马桶上看算法】算法3:最常用的排序——快速排序
【啊哈!算法】系列 上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10亿次,那么对1亿个数进行排序,桶排序则只需要0.1秒,而冒泡排序则需要1千万秒,达到115天之久,是不是很吓人。那有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速...
【同花顺公式编辑教程】第4章 功能函数
本章节主要给出大部分能够运行且常用的同花顺指标编辑器提供的函数。其中,计算类函数不作演示,绘图类函数提供示例及示例运行结果。
手把手教你读懂蓝牙BQB射频测试报告:以PRBS9为例的实战分析
本文以蓝牙BQB射频测试中的PRBS9信号为例,提供了一份实战分析指南。文章深入解读了输出功率、调制特性、邻道泄漏等核心测试项,并分享了信号分析仪操作技巧、测试环境搭建要点及设备选型建议,旨在帮助工程师精准解读报告,高效定位问题,确保产品顺利通过认证。
《啊哈算法》的Java现实 | 第二章:栈、队列、链表
啊哈算法 第二章 栈、队列、链表 解密QQ号—队列 package ch2; import javax.swing.plaf.synth.SynthEditorPaneUI; import java.util.Scanner; public class Test01 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.prin
NVIDIA Omniverse 技术浅析(二):USD
例如,一个用户可以负责场景的几何体设计,另一个用户可以负责材质和灯光的调整。USD 的开放性和可扩展性,结合 Omniverse 的 Kit 扩展框架,使得用户和开发者可以创建自定义的应用程序和工具,以满足特定的需求。USD 的材质和物理属性系统,结合 Omniverse 的 RTX 实时渲染技术,使得用户可以在虚拟环境中看到逼真的光影效果和物理模拟。USD 的时间轴和动画功能,结合 Omniverse 的物理属性系统,使得用户可以为虚拟环境中的元素创建复杂的动画和物理模拟。
《啊哈算法》第一章--排序(解析+代码)
桶排序,冒泡排序,快速排序 + 小哼买书(NOIP2006普及) 我会在原书基础上适当创新
【以太网硬件六】1000base-T物理层编码究竟是怎么编的?
详述1000base-T物理层4D-PAM5的编码过程
NX二次开发-用户自定义资源栏选项卡RegisterActivationCallback
NX二次开发-用户自定义资源栏选项卡RegisterActivationCallback
Java玩转《啊哈算法》排序之快速排序
搭嘎好!本人最近看的《啊哈算法》这本书写的确实不错,生动形象,在保持算法讲解准确性的同时又不失趣味性。但对我来说,稍显遗憾的是,书籍代码是c语言,而不是本人常用的Java。那就弥补遗憾,说干就干,把这本书的示例语言用java给翻译一遍!!!于是就有了本篇博客,这是第三篇博客,主要讲解快速排序。
杰理AC695N系列芯片 LED7数码管使用教程
杰理AC695N数码管使用摘要 本教程介绍了杰理AC695N芯片驱动LED7数码管的实现方法: 硬件配置:支持7/12/13脚三种数码管类型,详细说明了7脚数码管的标准段码定义和GPIO接线方式。 软件设置: 通过修改配置文件启用LED7功能 配置GPIO引脚映射(PORTC/PORTA组) 选择与硬件匹配的真值表 层次架构:包含硬件层、驱动层、UI层和应用层的完整设计,支持数字、字符和图标显示功能。 实现要点包括正确配置引脚类型、选择真值表,并通过UI风格设置为LED7模式。
快速排序(QuickSort)算法Java实现
任成风 2020年6月24日星期三 《啊哈算法》描述的快速排序算法,真让人怀疑以前的快速排序算法是不是真的学糊涂了。 百度了一下“java快速排序”,出来的一堆博客,和《啊哈算法》的同出一路,我的疑惑没有得到解答,不免有点失望。 自古评论区出人才,有意思的来了,我一看这几篇博客的评论区,果然是一片哀嚎,看来困惑的不只是我一个呀。 于是,我只好翻箱倒柜的找我以前上课记的笔记,看完用java描述了一下以前的算法。姑且就以老师讲的为准,以我过去学的为准吧。 1、快速排序思想 快速排序的核心是分割.
IEM模型,地表粗糙度模拟
利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟
WINCC7.3破解文件
WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!
快速排序(啊哈算法java实现)
import java.util.*; public class Main{ public static int n; public static int[] a = new int[1000]; public static void Qsort(int l,int r){ if(l<r){ int t = a[l]; int i = l; int j = r;...
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
啊哈算法系列(C语言、python、Java )
关于《啊哈!算法》相关资源 关于《啊哈!算法》相关资源 - 欣乐 - 博客园 第1章 一大波数正在靠近--排序 第1节 最快最简单的排序--桶排序 【坐在马桶上看算法】算法1:最快最简单的排序——桶排序 - 啊哈磊 - 博客园 【坐在马桶上看算法】算法1:最快最简单的排序——桶排序 【坐在马桶上看算法】算法1:最快最简单的排序——桶排序 - 啊哈磊 - 博客园 啊哈算法学习-简化版桶排序 啊哈算法学习-简化版桶排序_vivi_vivi_fu的专栏-优快云博客 第2节 邻居
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
啊哈算法(python)
啊哈算法(python) https://blog.csdn.net/cs373616511/category_10967935.html 《啊哈!算法》python版程序 《啊哈!算法》python版程序_左左张-优快云博客 python算法之使用列表 python算法之使用列表_oakley1的博客-优快云博客 python判断闰年算法 python判断闰年算法_Black_Atom的博客-优快云博客 冒泡算法-python实现 冒泡算法-python实现_weixin_
《啊哈算法》的Java现实 | 第一章:排序
啊哈算法 第一章:排序 桶排序 步骤: 1.申请一个大小为n的数组a[n],并将数组初始化为0 2.输入数组,当输入第一个数字为5时,就在对应的a[5]的值在原来的基础上+1,即将a[5]的值从0改为1 3.从大到下,倒序进行输出 package ch1; import java.util.Scanner; public class Test01 { public static void main(String[] args){ Scanner sc = new Scanner(Sys
快速排序——Java代码实现以及快排实现注意点
一、原理介绍 快速排序在一个数组中,会定义一个高位索引和一个低位索引以及一个参照数,参照数的值从原数组中指定一个较为合理的值(一般是低位索引或者是高位索引所在的值),进行排序时,高位索引向左遍历,低位索引向右遍历,由参照数的对面先开始: 1、当高位索引处的值遇到比参照数大的值时,暂停遍历; 2、低位索引开始遍历,当低位索引出现比参照数小的值时,暂停遍历; 3、此时将低位索引的值与高位索引的值进行互换; 4、循环上述步骤,直至排序完成。 二、代码实现 public static int[] sort(int[
Java、python实现啊哈算法 —— chapter1 小哼买书
这部分就是将chapter讲的3个排序算法:桶排序、冒泡排序、快速排序应用到买书的场景中去,话不多说,上代码: python: import numpy as np global n, a def swap(i, j): tem = a[i] a[i] = a[j] a[j] = tem def bucketsort(limit): #桶排序,以空间换时间,书号的范围多大就建一个多长的数组 global n #有多少本书 global a #标记图书号的列表
Java 快速排序 关于起始方向的选择问题 为什么一定要从右边开始
这是因为快速排序从右边开始的原因是因为选择的基准值key一般都是最左边的元素。 假设左哨兵为i 右哨兵为j 选择的key为最左边的元素 也就是说 当首先从右边开始先执行时,循环的条件是: while (i < j && array[j] >= key) j--; 最后i、j 停留的位置的值肯定是要 小于 key 的 此时交换索引 j 和最左边元素key符合...
《啊哈!算法》第一章 - 第三节 - 快速排序(Java实现)
《啊哈!算法》第一章 - 第三节 - 快速排序(Java实现)快速排序升序排序降序排序 快速排序 举个例子: 对 6 1 2 7 9 3 4 5 10 8 这 10 个数进行排序 首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,这就是一个用来参照的数,待会儿你就知道它用来做啥了)。为了方便,就让第一个数 6 作为基准数吧。接下来,需要将这个序列中所有比基准数大的数放在 6 的右边,比基准数小的数放在 6 的左边,类似下面这种排列: 3 1 2 5 4 6 9
我的算法记录——02Java实现快速排序
【代码】学习《啊哈!算法》中快速排序之后,自己用Java实现的快速排序。
【Java】《啊哈算法》-第一章排序
排序:桶排序、冒泡排序、快速排序
阅读《啊哈!算法》中的快速排序的Java实现
快速排序经常在考,需要掌握,基本原理: 一趟就是左右哨兵碰头了,即交换一次基准数。 Java实现: package com.hwb.app; public class QuickSort { static void Print(int a[]){ for(int i=0; i<a.length; i++) { System.out.print(a[i] + (i<a.l
快速排序 JAVA实现
快速排序,首先借用啊哈算法中的理论 方法其实很简单:分别从初始序列“612 79345 108”两端开始“探测”。先从右往左找一个小于6的数,再从左往右找一个大于6的数,然后交换他们。这里可以用两个变量i和j,分别指向序列最左边和最右边。我们为这两个变量起个好听的名字“哨兵i”和“哨兵j”。刚开始的时候让哨兵i指向序列的最左边(即i=1),指向数字6。让哨兵j指向序列...
557



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



