Java常用排序算法之快速排序

Java常用排序算法 阅读详情

快速排序(Quicksort):是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以数组中间元素作为关键数据,赋值给key,即key=A[N/2];
3)从j开始向前搜索,即由后开始向前搜索(j–),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

public class QuickSort {
    static final int SIZE = 10;

    public static void main(String[] args) {
        int arr[] = new int[SIZE];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * 100);
        }
        System.out.println("排序前的数组:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
        quickSort(arr, 0, SIZE - 1);
        System.out.println("快速排序后的数组:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }


        private static void quickSort(int[] a, int low, int high) {
            if(low<high){ //如果不加这个判断递归会无法退出导致堆栈溢出异常
                int middle = getMiddle(a,low,high);
                quickSort(a, 0, middle-1);
                quickSort(a, middle+1, high);
            }
        }

        private static int getMiddle(int[] a, int low, int high) {
            int temp = a[low];//设置基准值temp
            while(low<high){

                while(low<high && a[high]>=temp){
                    high--;
                }//从后往前找到第一个比基准元素小的元素位置
                a[low] = a[high]; //将其赋值给a[low]
                while(low<high && a[low]<=temp){
                    low++;
                }//从前往后找到第一个比基准元素大的元素位置
                a[high] = a[low];//将其赋值给a[high]
            }
            a[low] = temp;//将本轮基准值赋值给新的a[low]此时比基准值temp小的数都在a[low]左边
                          //比基准值temp大的数都在a[low]右边
            return low;//返回此轮基准值temp的此轮排序后的索引
        }
}

输出:

排序前的数组:
1 43 48 99 21 67 34 17 87 22 
快速排序后的数组:
1 17 21 22 34 43 48 67 87 99
AirSim中图像API的应用 解析Airsim图像获取保存的api 阅读详情

相关推荐

【软件逆向】带壳带反调试找flag教程(VMProtect3.0+X64dbg+ScyllaHide)

【软件逆向】带壳带反调试找flag教程(VMProtect 3.0+X64dbg+ScyllaHide)

zhangjiuding的博客 7516

JAVA常用排序算法之快速排序

JAVA常用排序算法之快速排序。 快速排序是冒泡排序的一种改进,要求排序速度较快。同样,这也是一种不稳定的算法。 具体的实现方式如下:首先设定一个初始值,然后进行比较,大于初始值的放在左边,小于初始值的放在右边,然后递归的进行左边和右边的比较。 算法的平均时间复杂度为O(n×log2(n))。 实现的代码如下:   public class Demo6 { /** ...

haha的博客 641

Abaqus 气动软体抓取器:从超弹性材料建模到抓取力仿真全流程解析

本文详细解析了Abaqus在气动软体抓取器仿真中的应用全流程,涵盖超弹性材料建模、接触设置优化到抓取力仿真等关键环节。通过实战案例分享Yeoh模型参数拟合、不可伸展层建模技巧及收敛优化策略,帮助工程师高效解决有限元仿真中的常见问题,提升软体机器人研发效率。

weixin_28689193的博客 238

python实现单链表快速排序升序linkedqueue_八种常用排序算法(Java语言描述)

八种常用排序算法(Java语言描述)各种排序算法的时间、空间复杂度、稳定性对比分析 1、冒泡排序冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端。/*...

weixin_39723655的博客 410

Windows环境下如何通过MCP Server实现MySQL安全连接与AI集成?

本文详细介绍了在Windows环境下如何通过MCP Server实现MySQL安全连接与AI集成。MCP Server作为大模型与MySQL之间的安全通道,提供权限控制、SSL加密和协议转换功能,显著提升查询性能。文章包含环境配置、安装指南、安全策略及实战案例,帮助开发者高效实现AI与数据库的安全交互。

hill8的博客 720

Emscripten安装(wasm编译)

5:配置对应环境变量--替换成自己对应的安装路径(2025最新的Emscripten工具链默认使用LLVM/WebAssembly标准工作流,java依赖已经移除了,所以以下java环境不配,需要使用java的手动添加即可---->emsdk install java-8-152-64bit。3:下载相应的依赖库---->emsdk install latest(我这里下的是最新的,如果有指定版本,把latest替换成版本号即可)6:测试是否成功---> emcc- v/em++ -v。

qq_31578301的博客 558

黑马程序员----Java中几种常用排序算法(选择排序、冒泡排序、快速排序)

Java中几种常用排序算法: class ThreeSort { public static void main(String[] args)//主函数,用于测试代码 { int[] arr={2,8,9,4,3,1,6}; quickSort1(arr,0,arr.length-1); sop(arr); } public static void sop(int[] ar

shaguayidianhong的专栏 1040

深入解析APS开源排程工具OptaPlanner:链式结构与移动优化

本文深入解析了开源APS排程工具OptaPlanner的核心机制,重点阐述了链式结构如何作为排程优化的“骨架”,通过单一`previous`变量隐式定义资源与顺序,从而简化建模。文章详细介绍了基于此结构的移动操作(如`ChainChangeMove`)如何驱动优化引擎探索解空间,并自动触发影子变量更新与分数计算,为构建高效、灵活的生产计划系统提供了实践指导。

keras9composer的博客 298

Java 常用排序算法实现--快速排序、插入排序、选择、冒泡

public class ArrayOperation { //二分查找算法 public static int branchSearch(int[] array, int searchNum) { if (array == null) throw new NullPointerException("Null Referrence");

北慕的博客 779

海德汉机床采集数据

海德汉数控系统我一般在高端机床上见得比较多。有好多五轴加工精度比较高的机床都用的是海德汉的系统。市面上常见的有530和640等型号。海德汉的采集还是有点难度的,需要对SDK有深度的了解。

若云流风的专栏 1531

基于Lstm+transformer的刀具磨损预测实战

基于Lstm+transformer的刀具磨损预测实战

2906

【Java常用排序算法】交换排序(冒泡排序、快速排序)

交换排序 冒泡排序 快速排序 Java实现

一个普本码农奋斗史 2204

第二天 原来Labview语言结构也挺自然(2.1 顺序结构)

新建项目文件StructureTest.lvproj,新建四个子VI(FlatSequence.vi、CaseStructure.vi、LoopStructure.vi、EventStructure.vi),具体新建流程可以参考1.2节。

weixin_38637405的博客 1004

【常用排序算法】快速排序(Java实现)

分区函数:public static int Partition(int A[], int left, int right){ int pivot =A[right]; int index=left; for(int i=left;i<right;i++){ if(A[i]<pivot){ int temp=A[i];

DChuan 797

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

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

【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import java.util.Arr

小坚的技术博客 1150

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

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

常用排序算法总结----快速排序(java实现)

快速排序使用分治策略来把一个序列(list)分为两个子序列(sub-lists)。步骤为: ①. 从数列中挑出一个元素,称为”基准”(pivot)。 ②. 重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。 ③. 递归地(recursively)把小于...

Franky 407

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Java实现常用的排序算法(快速排序、归并排序、基数排序)

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。快速排序又是一种分而治之思想在排序算法上的典型应用。

weixin_46073538的博客 1028

常用排序算法总结(二)快速排序(java实现)

1.0 描述 冒泡排序在相邻位置进行,比较和移动的次数较多,快速排序又称分区交换排序,是对冒泡排序的改进。基本思想是: 选定一个值为轴值; 将序列分为左右两个区,比轴值大的值放在右区,比轴值小的值放在左区; 各区间重复1、2至序列有序。 我们选择序列的第一个数为轴值。 2.0 代码实现 import java.util.Arrays; public class Partition ...

qin_xu的博客 204

3D模型平台与数字人生成及AI知识库整合落地指南

在人工智能与三维可视化技术融合的背景下,3D模型平台、数字人生成与AI知识库正成为构建沉浸式智能交互系统的三大核心支柱。理解其底层原理需从资产管埋、形象驱动与检索增强生成(RAG)入手,分别对应模型格式转换、语音合成与口型同步、向量检索与问答生成等关键技术。这一组合的技术价值在于打破传统界面的限制,提供更具亲和力的信息服务形态,可广泛应用于企业虚拟展厅、智能培训助手、文旅导览等场景。本文将围绕三者的模块边界与协作链路,梳理从环境准备、服务部署到功能验证的整套工程实践路径,帮助开发者快速搭建可落地的本地化数字

weixin_33862993的博客 304

【算法】Java实现常用排序算法一(冒泡排序、选择排序、插入排序、堆排序、快速排序)

常用算法插入排序冒泡排序选择排序 插入排序 冒泡排序 选择排序

TiramisuDP的博客 375

Java 中常用的排序算法:冒泡排序、插入排序、选择排序、快速排序、归并排序(附代码)

Java 中常用的排序算法:冒泡排序、插入排序、选择排序、快速排序、归并排序(附代码)

qq_39713099的博客 634

常用排序算法java代码实现---快速排序,冒泡排序,选择排序

快速排序 public class QuickSort {     public void qSort(int[] arr,int left,int right) {         if(left&gt;right) {             return ;         }         int i = left;         int j = right;         in...

weixin_42230478的博客 292

Java常用的数组排序算法(面试宝典)

这段时间有些忙,今天空闲出来给大家分享下Java中常用的数组排序算,有冒泡排序、快速排序、选择排序、插入排序、希尔算法、并归排序算法、堆排序算法,以上排序算法中,前面几种相对后面的比较容易理解一些。下面为大家一一介绍,写的不好,大佬绕过。 1、冒泡排序 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行...

坐看云起时_雨宣 8260

常用排序算法

生活中常用的排序算法:冒泡排序、插入排序、快速排序 常用排序算法java实现代码 package com.tao.bao;      /**   * @author Administrator   *   */  public class SortAll {        /**       * @param args       * 插入排序       */      p

yunfei8yunfei的专栏 412

java四大常用排序算法

java四大常用排序算法 package www.suanfa.sort; /** 方法描述: 冒泡排序 快速排序 插入排序 选择排序 折半查找 @author PC */ public class Sort { /** * 测试方法 * @param args */ public static void main(String[] args) { int[] arr={0,...

weixin_41254252的博客 539
上一篇: Java常用排序算法之希尔排序
下一篇: Java常用排序算法之堆排序
詹詹自喜KING
博客等级 码龄11年 40粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值