java快速排序 (任何人都能看懂的快速排序)

Java实现快速排序 1 问题描述 给定一组数据,使用快速排序得到这组数据的非降序排列。 2 解决方案 2.1 快速排序原理简介 引用自百度百科: 快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整... 阅读详情

快速排序
如果有人问我什么是快速排序,第一反应就是将乱序的数从小到大排列好,也可以是从大到小。好像其他的也说不出什么了,还有一个就是简称"快排"。

先说一说快排的基本思想

1.先从数列中取出一个数作为基准数(简单起见就选第一个数)
2.分区过程:将比这个数大的数全放到他的右边,比他小的数全放到他的左边(分治)
3.再对左右两边的区重复第一步和第二部操作,直到各区间只有一个数(递归)

简单来说就是: 快速排序 = 冒泡 + 分治 + 递归

下面就来呈上任何人 都可以看明白的图解
(我是用word表格画的,所以只能截图了)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
下面上代码

package com.qcby.lp;
 import java.util.Arrays;
/**
 * 快速排序
 * author lp
 * Date  2019.06.04
 */
 
public class TestKSPX {
    public static void KSPX(int [] arr){
       
        int l = 0;
        int h = arr.length - 1;
        KSPX(arr,l,h);
    }  
        
    private static void KSPX(int[] arr, int l, int h) {
        if(l<h){
            //分区 返回分区界限索引
            int index = part(arr,l,h);
            //左分区快速排序
            KSPX(arr, l, h-1);
            //右分区快速哦哎嘘
            KSPX(arr, l+1, h);
        }
     }

    private static int part(int[] arr, int l, int h) {
        //指定i,j
        int i= l;
        int j = h;

        //指定基准数(第一个数)
        int x  = arr[l];
        while(i<j){

            while(arr[j]>=x && i<j){
                j--;
            }
            if(i<j){
                arr[i] = arr[j];
                i++;
            }

            while(arr[i] <=x && i<j){
                i++;
            }
            if(i<j){
                arr[j] = arr[i];
                j--;
            }
        }
        arr[i] = x;
        return i;

    }


    public static void main(String[] args) {

        //定义一个无序数组
        int arr[] = {72,6,57,88,60,42,83,73,48,85};
        //输出无序数组
        System.out.println(Arrays.toString(arr));

        //快速排序
        KSPX(arr);
        //输出有序数组
        System.out.println(Arrays.toString(arr));
        
        }
    }

程序运行截图
在这里插入图片描述

(转载或引用请标明出处,谢谢!)

air780e stm32标准库发送英文短信,如何实现?(附相关源码,仅供参考) 🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。 阅读详情

相关推荐

网络设备心跳线带宽高导致虚拟化平台不稳定的问题处理

本文记录了网络设备心跳线带宽高导致虚拟化平台不稳定的问题处理一例。

forestqq的博客 2228

【Java】快速排序

本文介绍了快速排序的原理优点,以及如何选取基准元素,交换元素的方法等。

zcxyywd的博客 2万+

RK3576开发板ROS2部署实战:从Buildroot配置到Hello World Demo

本文详细介绍了在RK3576开发板上部署ROS2的完整实战流程。从Buildroot工程配置、集成ROS2依赖,到搭建Docker交叉编译环境、处理编译难题,最终完成系统镜像打包并在板端成功运行Talker-Listener Demo。该指南旨在帮助开发者深入理解嵌入式机器人系统的构建链,实现从底层到应用的完全掌控。

mac99的博客 1156

java 实现快速排序

1.介绍 快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一 部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序 过程可以递归进行,以此达到整个数据变成有序序列。 2.切分原理 切分原理: 把一个数组切分成两个子数组的基本思想: 1.找一个基准值,用两个指针分别指向数组的头部和尾部; 2.先从尾部向头部开始搜索一个比基准值小或等于的元素,搜索到即停止,并记录指针的位置; 3.再从头部向尾..

m0_46306264的博客 1万+

MRI脑影像分析从哲学到技术:一文搞懂VBM预处理基本原理(全网最详细解析)

   分析大脑解剖学差异最常用方法之一是基于体素的形态学方法(voxel-based morphometry, VBM)。 VBM的基本思想是测量大脑组织,尤其是灰质的局部浓度的差异。在大脑的每个体素处进行操作,然后在两个或多个实验组之间进行统计比较,从而在受调查的组之间建立特定大脑区域中脑组织浓度的统计学显着差异。 VBM分析基于(高分辨率)MRI脑部扫描,涉及大量处理步骤,主要是空间归一化,分割,平滑和统计分析,最终结果是统计图,显示了各组之间组织类型明显不同的区域[^1]。 参考 [^1] ..

意疏的学习笔记 3万+

YOLOv9分割改进 ,YOLOv9分割改进主干网络为华为EfficientNet,助力涨点

EfficientNet论文中研究了卷积网络的缩放和,并证明对深度,宽度和分辨率复合缩放的重要性,因此精度和效率更好。为了阐述相关的原理,我们提出了简单有效的复合缩放方法,使得模型缩放具有一定设计准则,同时兼顾了模型的效率。我下文将 YOLOv9 分割模型改进主干网络为 EfficientNet 融合网络结构。论文地址代码地址下文都是手把手教程,跟着操作即可添加成功把环境配置好,数据集处理好,训练基本能成功,创作不易,请帮忙点一个爱心,关注我,带你不挂科!

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 938

Java 七大排序之快速排序(三种方法包含优化方法)

1. 快速排序整体的综合性能和使用场景都是比较好;2.时间复杂度:O(N*logN) 空间复杂度:O(logN);3.稳定性:不稳定。

m0_56911648的博客 1万+

“华为杯”研究生数学建模竞赛2020年-【华为杯】E题:能见度估计与预测(附获奖论文及python代码实现)

因此,题目要求借助机场的 AMOS 观测数据中的气压、温度、湿度、风速等气象因子,达到 100% 时,空气中的水汽便会凝结成细微的水滴悬浮于空中,使地面水平的能见度下。传统的仪器探测法成本高,覆盖范围小,而基于视频的能见度检测能弥补仪器测量的不足之处,但是预测精度不高,需要进一步改。象条件,空气质量的影响,其中较为关键的影响因子是雾和霾。性过强,激光能见度仪的检测方法更为可信,但是激光能见度仪覆盖的检测范围小,安装。覆盖的交通视频路况数据间接计算得到能见度数值的方法,此方法成本较低,覆盖范围广。

getusushu的博客 2282

Java快速排序

前后相邻的两个数两两进行交换,如果前面的数大于后面的就交换,否则不交换,直到最大的数到达最后,循环这一过程直至全部排序完成。一趟遍历下来排好了7的位置,然后再从头开始这次只需要拍好7前面的数组就好了,每次循环中最大的那个数,都会排好位置,就像一个气泡一个一个的到达排好的位置,所以叫做冒泡排序。

G81948577的博客 8375

【C++PCL】点云文件读写

本文介绍 PCL 中 PCD 与 PLY 点云文件的读取、保存和字段检查,覆盖 PointXYZI、PointXYZRGB、ASCII、二进制及压缩二进制,并给出 C++11 实操代码与参数调试建议。

weixin_45196569的博客 42

Java 快速排序

快速排序是一种常用的基于比较的排序算法,其时间复杂度为 O(nlogn),并且具有稳定性和广泛的应用场景。本文将全面详细的讲解一下 Java 中快速排序算法的原理、实现以及时间复杂度等问题。

兴趣是最好的老师,勤能补拙 1万+

Python 实战:手语翻译系统——从视频到文本的智能转换

今天,我们用 Python 构建了一个。

Echo_Wish 344

java快速排序

Java算法——java快速排序 文章目录Java算法——java快速排序一、快速排序简介二、代码实现三、测试用例总结 一、快速排序简介 示例数组: int[] arr = {-9, 78, 0, 0, 1, 0, 3, -1, 23, -56, 7} 简介:快速排序,基于冒泡排序移动换位思想——通过遍历,判断每个数并放置在数组合适的位置。思路如下: 选定一个基准值pivot(通常指定为数组第一个值),比基准值大的放在右侧,比基准值小的放在左侧 指定左右两个指针分别为left,right ;left &l

weixin_39902962的博客 2万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java 实现快速排序

Java 实现快速排序原理逻辑Java代码实现 原理逻辑 同冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。 不同的是,冒泡排序在每一轮只把一个元素冒泡到数列的一端,而快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分。 Java代码实现 /** * <快速排序> * * @Author: chenxin * @Date: 2020/9/11 */ public class

陈新的博客 810

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java 快速排序流程图_[图解] 快速排序

1. 经典快速排序图示过程(1) 经典快速排序的总体流程(2) 根据基准值分区的过程2. 随机快速排序经典快速排序总是指定数组或者某部分的最后一个元素作为基准值,随机快速排序指定数组或者某一部分中的随机值作为基准值。3. 动图展示quickSort.gif4. 随机快速排序Java代码实现/*** 快速排序,使得整数数组 arr 有序*/public static void quickSort(i...

weixin_42567752的博客 2191

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java实现快速排序

java实现快速排序(从小到大排序) 原理:(采用分治思想)设需要排序的数组是arr[n],每次从数组总选出一个数(随机就可以)为了方便我每次都选数组或者是子数组的最后一个数key=arr[right]。选好了这个数,然后用j循环这个数组,在循环的时候判断arr[i]<=arr[right],成立交换arr[i]和arr[j]的位置,i自增一次。循环结束后,将key和arr[i]交换。 这样arr[i]左侧,就都是比key小的数,右侧都是比key大的数。返回i,这样就得到了以i为界的两个数组。 将得到

gangsiqiu1848的博客 644

java实现快速排序以及快速排序的原理

java的快速排序,快排实现

qq_41365496的博客 2487

Java 快速排序_JAVA 实现快速排序

高效的分治排序快速排序是冒泡排序的改进版,是目前已知的最快的排序方法。该排序算法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。优点:极快,数据移动少;缺点:不稳定。算法实现假设我们现在要对{5,7,2,1,9,10,4,6,3,8}这个数组进行快速排序,我们应该怎么怎...

weixin_42564147的博客 1351

快速排序算法_排序算法Java实现快速排序算法

点击上方蓝字关注我们作者:Cansluck优快云博客:https://blog.youkuaiyun.com/xgx120413开篇介绍大家好,公众号【Java极客思维】近期会整理一些Java高频面试题分享给小伙伴,也希望看到的小伙伴在找工作过程中能够用得到!本章节主要针对Java快速排序算法的实现进行分享。首先,来看一下,快速排序的实现的动态图:快速排序介绍:快速排序,根据教科书说法来看,是冒泡...

weixin_39588223的博客 559

java快速排序代码_java快速排序算法

[java]代码库/*** 快速排序** 在当前无序区R[1..H]中任取一个数据元素作为比较的"基准"(不妨记为X),用此基准将当前无序区划分为左右两个较小的无序区:* R[1..I-1]和R[I+1..H],且左边的无序子区中数据元素均小于等于基准元素,右边的无序子区中数据元素均大于等于基准元素,* 而基准X则位于最终排序的位置上,即R[1..I-1]≤ X.Key≤R[I+1..H](1≤I...

weixin_35291771的博客 794

java 排序_快速排序java

0. 说明在计算机中,算法是很重要的一部分,前几天遇到一个面试题,快速排序的问题,今天我们就来简单的讲讲快速排序的问题。其实算法在计算机中的位置举足轻重,几乎是每一个CSer都知道的,但是个人理解的就是,所有的算法,真的是逃不出最基本的算法,那就是查找和排序。而其他所有的业务中或者是实际应用中的算法,基本上都是这些基本算法的变形或者是结合,所以我们学习算法的时候,要学会最基本的算法,并融会贯通,那...

weixin_39657521的博客 427

java 快速排序

java快速排序

weixin_43931625的博客 348
上一篇: String类和StringBuilder类的原理 以及 比较
下一篇: javaWeb的三层架构图
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值