Java语言实现快速排序

递归方式实现的快速排序算法JAVA语言 JAVA实现快速排序算法(递归) 快速排序是对冒泡排序的一种改进,它的基本思想是:选取数组中的第一个元素作为中间值,以中间值为基准,通过一趟排序后将要排序的数据分为两部分,左边部分的数值全部小于中间值,右边部分的数值全部大于中间值。然后再按照此方法对这两部分的数据再分别进行排序。整个排序过程可以递归进行。 实现效果如下: 排序前: 52 15 64 87 18 第1次排序后的结果: 18 15 52 87 64 第2次排序后的结果: 15 18 52 87 64 第3次排序后的结果: 15 18 52 阅读详情

Java语言实现快速排序
快速排序的思想是:通过一趟排序将待排的记录划分为独立的两部分,称为前半区和后半区,其中,前半区中的关键字均不大于后半区记录的关键字,然后再分别对这两部分记录继续进行快速排序,从而使整个序列有序。
一趟快速排序的过程称为一次划分,具体做法是:附设两个位置指示变量i和j,它们的初值分别指向序列的第一个记录和最后一个记录。设枢轴记录(通常是第一个记录)的关键字为privot,则首先从j所指位置向前搜索,找到第一个关键字小于privot的记录时将该记录向前移到i指示的位置,然后从i所指的位置向后搜索,找到第一个关键字大于privot的记录时将该记录向后移动到j所指的位置,重复该过程直至i与j相等为止------------以上文字皆摘自软件设计师教程书中。

跳过文字,直接撸代码。为了方便理解,将上述文字中的i替换为start,j替换为end,privot替换为flag
//一趟快速排序的过程
 public static int procedure(Object[] arr,int start,int end){
        Object flag = arr[start];   //上述文字中描述的枢轴记录,通常是第一个记录即arr[start]
        Object temp = null;
        //start =end 时,一趟快速排序结束
        while(start < end){
            while(start < end && arr[end].hashCode() >= flag.hashCode()){
                end--;
            }
            temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
            while(start < end && arr[start].hashCode() <= flag.hashCode()){
                start++;
            }
            temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }
        //返回start值,start值为整个数组前半区和后半区的分隔坐标
        return start;
    }
//对数组进行快速排序
public static void quickSort(Object[] arr,int start,int end){
        if(start < end){
            int result = procedure(arr,start,end);
            //递归方式对前半区和后半区进行快速排序
            quickSort(arr,start,result-1);
            quickSort(arr,result+1,end);
        }
    }

测试

 public static void main(String[] args){
        Object[] arr = new Object[]{"Q","H","C","Y","P","A","M","S","R","D","F","X"};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

输出
[A, C, D, F, H, M, P, Q, R, S, X, Y]

快速排序java语言实现版本 java语言实现的快速排序源码,其中包括java语言的随机数组生成器。 立即下载

相关推荐

JAVA实现快速排序

java实现的快速排序算法

Java编程——随机生成20个数,从小到大排列(方法一)

此次代码可实现随机生成20个整数,将这20个数从小到大进行排列 package biji; import java.util.Arrays; import java.util.Random; public class demo10 { public static void main(String[] args) { Random random = new Random(); int[] a=new int[20]; for (int i = 0

qq_51711561的博客 5396

PX4无人机offboard开发之旅

(慢慢更)无人机OFFBOARD开发

InTereSTingHE的博客 1078

快速排序详解(附Java代码)

相信大家对快速排序并不陌生,在面试中、学习上都会遇到,本篇将对快速排序的概念和代码以及复杂度展开叙述。

weixin_69077250的博客 3291

SDIO_WiFi驱动学习之SDIO架构介绍及源码分析

一、引言 因为WiFi驱动比较复杂,所以WiFi驱动的博客将分为两篇来写。 本篇博客主要介绍Linux下的SDIO架构及源码分析。 二、SDIO WiFi SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈,能够实现用户主平台数据通过SDIO口到无线网络之间的转换。SDIO具有传输数据快,兼容SD、MMC接口等特点。 对于SDIO接口的WiFi,首先,它是一个SDIO的卡设备,然后具备了WiFi的功能。所

陈子陌的博客 1万+

ControlCAN.dll开发适配USBCAN_E/2E_U设备

摘要:本文提供了USBCAN_E/2E_U设备的配置指南:1)安装专用驱动;2)获取最新的ControlCAN.dll文件;3)修改VCI调用顺序,新增VCI_SetReference函数设置波特率;4)使用工具计算波特率配置值,并给出了常见波特率对应的代码参考值(如500K对应0x060007)。配置过程强调使用特定工具计算精确的波特率参数,并提供了相关软件下载链接。

weixin_43969033的博客 390

Java快速排序

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

G81948577的博客 8375

手把手教你用Keil5和Proteus8给51单片机跑个流水灯(附完整源码+安装包)

本文详细介绍了如何使用Keil5和Proteus8为51单片机实现流水灯效果,包括开发环境配置、汇编代码编写、电路设计及仿真调试。通过完整的源码和安装包,帮助初学者快速掌握C51单片机开发的核心流程,适合嵌入式开发入门学习。

weixin_42632434的博客 372

(四)排序算法(Java实现)

本篇博客中总结了以下经典排序算法:冒泡排序、快速排序、简单插入排序、希尔排序、简单选择排序、堆排序、二路归并排序、计数排序、桶排序、基数排序。经典的排序算法分为下面两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序。时间复杂度不能突破O(nlogn)而得此名称。 线性时间非比较类排序:不能通过比较来决定元素间的相对次序。它可以突破比较排序的时间下限,以线性时间运行而得此称。...

zl_StepByStep的博客 7236

Mid-360激光雷达与IMU标定实战:从环境配置到参数优化

本文详细介绍了Mid-360激光雷达与IMU标定的完整流程,涵盖环境配置、驱动适配、参数优化及实战操作。重点解析了标定参数设置技巧与常见问题解决方案,帮助开发者提升机器人感知系统的定位与建图精度,确保LiDAR-IMU数据融合的最佳效果。

a1b2c3d的博客 915

别再手动算电阻了!手把手教你从ITF/IRCX文件自动生成EMX工艺文件(附脚本思路)

本文详细介绍了如何从ITF/IRCX文件自动生成EMX工艺文件,提升芯片设计效率。通过解析厚度变化多项式和电阻率查表,实现工艺文件的高效转换,避免手动处理带来的错误。文章还提供了脚本思路和验证方法,确保数据精确度,特别适用于电感仿真等关键环节。

didui8202的博客 455

java 实现快速排序

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

m0_46306264的博客 1万+

YOLOv26详解 | 一文带你从代码角度深入理解ultralytics最新作品yolov26的创新 | 训练、推理、验证、导出 (附网络结构图PPT可用,全网最全)

YOLOv26带来多项创新:1)采用双检测头机制(One-to-Many和One-to-One)实现端到端无NMS推理;2)移除DFL简化边界框回归;3)引入ProgLoss+STAL优化小目标检测;4)使用MuSGD优化器提升训练稳定性。网络结构方面,SPPF模块增加shortcut连接,并在C3k2中引入PSABlock注意力机制。该版本更注重实际部署,简化了推理流程,提升硬件兼容性。教程涵盖模型训练、验证、推理及导出全流程,支持多种格式转换如ONNX、TensorRT等,适合工业应用场景。

Snu77的博客 4068

快速排序在C语言和java下的实现

1. 快排的原理 时隔多日我们在被要求去写一个快速排序的时候可能无从下手,对于一个算法的考单纯的记忆不足以牢牢掌握它,深刻理解其机制才是学习算法的重要手段。 下面我们来解读一下快速排序。 快速排序由东尼·霍尔所发展。快速排序通常明显比其他 Ο(nlogn) 算法更快。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)

qq_41098158的博客 295

uniapp - 解决App端报错reportJSException >>>> exception function:createInstanceContext, exception:white sc

uni-app,安卓Android,苹果ios,安卓app端,苹果App端,uniapp苹果安卓app,uniApp报错,reportJSException>>>>exceptionfunction:createInstanceContext,exception:whitescreencausecreateinstanceContextfailed,运行自定义基座时白屏,uniapp项目运行白屏reportJSException,检查没问题依旧报错,第三方库插件,组件,uniapp打包调试

🏆 前端领域优质创作者 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

快速排序的Java语言与C语言实现

C语言版本: void sort(int *a, int left, int right) { if(left >= right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/ { return ; } int i = left; int j = right; int key = a[left];

匆匆那年 589

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

利用Java语言实现快速排序算法

如题:利用Java语言实现快速排序算法 分析: 1、快速排序算法:先取一个标准数,然后从两端开始和这个标准数比较大小,比标准数大的放右边,比标准数小的放左边。 2、每比较一次后,两端相应的下标分别向中间移动,左边的向右移动(下标 +1),右边的向左移动(下标 -1)。 3、当左右两个下标重合时,再将标准数赋给这个重合的位置。 4、第一轮结束后,会出现左右两块,左边的都小于等于标准数,右边的都大于等...

一只小白的奋斗历程的博客 754

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java、C语言实现快速排序算法

代码: #include #include int   findpivot(); int   partion (); void  quicksort (); int main() {     int n,i;     printf("请输入需要排序的元素的个数:");     scanf("%d",&n);     int a[n];     for(i = 0;i

即使没人看我也要写 744

数据结构 c语言 java 实现快速排序

虽然用 c写的但是用了引用 要在c++环境中 跑 主要是结合 #include<stdio.h> #define MaxSize 20 //顺序表最大长度 typedef int KeyType; //typedef定义关键字类型为(int) typedef int InfoType; typedef struct { KeyType key; //关键字项 InfoType otherinfo; //其他数据项 }RedType; typedef s...

qq_19551571的博客 319

详解分治法-快速排序-java语言实现

分治法-快速排序-java语言实现 问题描述: 输入一个数字N后,输入N个数字,将N个数字排序后输出. 输入: 8 1 6 5 2 3 8 7 9 输出: 1 2 3 5 6 7 8 9

qq_44864169的博客 2283

快速排序算法思想及其java语言实现

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:选择序列中的某个数作为基准值 通过一趟排序将要排序的数据分割成独立的两部分,其中左边的数据都比基准值小,右边的数据都比基准值大 然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 如下为快速排序算法的java语言代码实现 public class QuikSort...

qq_41967563的博客 239

快速排序的实现(C语言和Java实现)

基本思想: 确定一个基准值,通过一趟排序将要排序的数据分割成独立的两部分,左边的数据比指定的值小,右边的数据比指定的值大,然后再对左右两边分别进行递归 C语言实现: #include<stdio.h> void print(int a[],int n) { int i; for(i=0;i<n;i++) { printf("%d ",a[i]); } pr...

if_i_were_a的博客 156

快速排序-JAVA语言实现

import java.util.Scanner; public class QuickSort { /** * @param args */ public static void Display(int[] arr, int n){ for(int i = 0; i < n; i++){ System.out.print(arr[i]+" "); } ...

Lau's Blog 722

快速排序java语言实现

快速排序是很重要的排序算法,但是我在学的时候发现网上没有特别好的例子所以自己动手写了一个。 自己动手丰衣足食。 package sort; import java.util.Random; public class QuickSort { @SuppressWarnings("unused") public boolean initTestArray(int[] testArr

weiqianghu的博客 1289

快速排序的代码实现(java语言)

快速排序 /** * className:Sort * * @author:zjl * @version:0.1 * @date:2020/8/720:05 * @since:jdk1.8 */ public class Sort { //测试 public static void main(String[] args) { int R[] = {1, 5, 9, 2, 6, 3, 7, 4, 8}; int[] ints = quickSort

weixin_38334306的博客 229

十大经典排序算法——快速排序 (Java、JavaScript、PHP、Python、Go语言实现

十大经典排序算法之——快速排序 本文主要介绍十大经典排序算法中的“快速排序”,并附上插入排序算法的Java、JavaScript、PHP、Python、Go语言实现。 1、十大经典排序算法介绍 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择...

菜鸟的后花园 719
上一篇: JavaWeb 文件上传和下载
下一篇: 快速整合ssh框架搭建简单demo
钮祜禄氏·哆啦A栋
博客等级 码龄10年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值