java排序方式总结

基于java实现的10种基本排序方式 用java实现了10种基础排序,其内容包括: 1.冒泡排序 2.选择排序 3.插入排序 4.快速排序 5.希尔排序 6.归并排序 7.堆排序 8.桶排序 9.基数排序 10.计数排序 如有疑问请私信我 立即下载

原文出自搬砖工,需要转载请注明出处。


总结一下java实现的几种常见的排序方式,以便以后使用和面试的时候能够作为参考。
一、冒泡排序

public static void bubbleSort(int[] numbers) {   
    int temp; // 记录临时中间值   
    int size = numbers.length; // 数组大小   
    for (int i = 0; i > size - 1; i++) {   
        for (int j = i + 1; j < size; j++) {   
            if (numbers[i] < numbers[j]) { // 交换两数的位置   
                temp = numbers[i];   
                numbers[i] = numbers[j];   
                numbers[j] = temp;   
            }   
        }   
    }   
}

解释:冒泡排序意思就是将大的数字不断地往上交换,然后达到一种排序效果。首先看第一for循环,size是数组的大小,数组的第一个数下标是0.那么j就是1。第一次比较的是第一个和第二个数字谁大,然后将大的换到第一个数。然后比较第二一个和第三个数,将大的排到第一个去。以此类推,最大的数将会排到第一个数。然后执行第二个循环,把后面的数比较大的换到第二个数去。循环执行完,排序完毕。
二、快速排序

public static void quickSort(int[] numbers, int start, int end) {  
    if (start < end) {  
        int base = numbers[start]; // 选定的基准值(第一个数值作为基准值)  
        int temp; // 记录临时中间值  
        int i = start, j = end;  
        do {  
            while ((numbers[i] < base) && (i < end))  
                i++;  
            while ((numbers[j] > base) && (j > start))  
                j--;  
            if (i <= j) {  
                temp = numbers[i];  
                numbers[i] = numbers[j];  
                numbers[j] = temp;  
                i++;  
                j--;  
            }  
        } while (i <= j);  
        if (start < j)  
            quickSort(numbers, start, j);  
        if (end > i)  
            quickSort(numbers, i, end);  
    }  
}

解释:从数列中挑出一个元素,称为“基准”。重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,该基准是它的最后位置。这个称为分割(partition)操作。然后递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
三、选择排序

public static void selectSort(int[] numbers) {  
    int size = numbers.length, temp;  
    for (int i = 0; i < size; i++) {  
        int k = i;  
        for (int j = size - 1; j >i; j--)  {  
            if (numbers[j] < numbers[k])  k = j;  
        }  
        temp = numbers[i];  
        numbers[i] = numbers[k];  
        numbers[k] = temp;  
    }  
}

解释:在未排序序列中找到最小元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。
四、插入排序

public static void insertSort(int[] numbers) {  
    int size = numbers.length, temp, j;  
    for(int i=1; i<size; i++) {  
        temp = numbers[i];  
        for(j = i; j > 0 && temp < numbers[j-1]; j--)  
            numbers[j] = numbers[j-1];  
        numbers[j] = temp;  
    }  
}

解释:
1.首先从第一个元素开始,该元素可以认为已经被排序
2.其次取出下一个元素,在已经排序的元素序列中从后向前扫描
3.然后如果该元素(已排序)大于新元素,将该元素移到下一位置
4.再重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
5.最后将新元素插入到该位置中
6.重复步骤2
五、归并排序

public static void mergeSort(int[] numbers, int left, int right) {  
    int t = 1;// 每组元素个数  
    int size = right - left + 1;  
    while (t < size) {  
        int s = t;// 本次循环每组元素个数  
        t = 2 * s;  
        int i = left;  
        while (i + (t - 1) < size) {  
            merge(numbers, i, i + (s - 1), i + (t - 1));  
            i += t;  
        }  
        if (i + (s - 1) < right)  
            merge(numbers, i, i + (s - 1), right);  
    }  
}  
//归并算法实现
private static void merge(int[] data, int p, int q, int r) {  
    int[] B = new int[data.length];  
    int s = p;  
    int t = q + 1;  
    int k = p;  
    while (s <= q && t <= r) {  
        if (data[s] <= data[t]) {  
            B[k] = data[s];  
            s++;  
        } else {  
            B[k] = data[t];  
            t++;  
        }  
        k++;  
    }  
    if (s == q + 1)  
        B[k++] = data[t++];  
    else 
        B[k++] = data[s++];  
    for (int i = p; i <= r; i++)  
        data[i] = B[i];  
}

解释:
1.首先申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
2.然后设定两个指针,最初位置分别为两个已经排序序列的起始位置
3.其次比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
4.再重复步骤3直到某一指针达到序列尾
5.最后将另一序列剩下的所有元素直接复制到合并序列尾


ps:代码由网络摘取
java排序、冒泡、二分、插入、选择等排序方法分析 描述:冒泡排序 * 特点:算法简单但运行速度慢,算法交换次数和比较次数都是O(N*N) 描述:插入排序 * 特点:插入排序算法任然需要O(N*N),但一般情况下它要比冒泡算法快一倍,比选择排序也快, * 它常用在较复杂的排序算法后阶段<br/> * 使用:数据量较小、基本有序的情况一般选择 插入排序 描述:选择排序 * 特点:优化了冒泡排序,交换次数减少到O(N),比较次数依然为O(N*N) 描述:二分查找发 核心算法 * 注意:mid = (low + high) >>> 1 不能使用(low + high)/2,因为如何low+high>Integer.MAX_VALUE时会发生溢出 立即下载

相关推荐

Java源码对用户名进行比较排序.rar

Java源码对用户名进行比较排序.rar

详解Java常用排序算法(10种,含演示动画)

Java常用的排序算法有以下几种: 1. 冒泡排序;2. 选择排序;3. 插入排序;4. 希尔排序;5. 归并排序;6. 快速排序;7. 堆排序;8. 计数排序;9. 桶排序;10. 基数排序。 这些排序算法都有各自的优缺点,应根据具体情况选择适合的算法。

不积跬步无以至千里,不积小流无以成江海。一个喜欢学习分享的程序员 3万+

如何快速获取SAMM、SMIC等主流微表情数据集?完整申请指南(附避坑技巧)

本文提供了获取SAMM、SMIC等主流微表情数据集的完整申请指南,包括申请前的准备工作、分步申请流程、协议谈判技巧以及数据使用与维护策略。特别针对高分辨率动态捕捉和多模态同步数据等热词,帮助研究者高效获取高质量数据集,避免常见陷阱。

weixin_29057163的博客 421

java7种排序(需熟练掌握)

java7种排序算法 文章目录java7种排序算法@[toc]1.冒泡排序2.插入排序3.选择排序4.希尔排序5.归并排序6.快速排序7.基数排序(基于桶排序) 1.冒泡排序 public void bubbleSort(int[] array){ for (int i = 0; i < array.length-1; i++) { boolean flag=false; for (int j = 0; j <array.lengt

qq_53280986的博客 3639

一代测序、二代测序以及三代测序的优缺点及应用对比?

一、初现庐山真面目 一代测序:又称Sanger测序(多分子,单克隆) 历史:第一代DNA测序技术(又称Sanger测序)在1975年,由Sanger等人开创,并在1977年完成第一个基因组序列(噬菌体X174),全长5375个碱基。研究人员经过30年的实践并对技术及测序策略的不断改进(如使用了不同策略的作图法、鸟枪法),2001年完成的首个人类基因组图谱就是以改进了的Sanger法为其测序基础。 原理:在4个DNA合成反应体系(含dNTP)中分别加入一定比例带有标记的ddNTP(分为:ddATP...

wangprince2017 3万+

从零开始深入理解 AI Agent(完整版)

AI Agent(智能体)是一个能够自主感知环境、做出决策、执行行动并记忆经验的智能系统。特性传统程序AI Agent决策方式固定逻辑(if-else)动态推理(LLM 思考)灵活性需要重新编程自然语言描述即可能力边界明确限定可通过工具扩展学习能力无可通过记忆积累经验│ 感知 │ ───→ │ 推理 │ ───→ │ 行动 │↑ │ ││ ↓ ││ 记忆 │ ←─── │ 反思 │ ←─────────┘感知(Perception)

qq_20096229的博客 754

转载:一篇文章搞懂Java十种常见排序方法(原理+代码+注释)

一篇文章搞懂Java十种常见排序方法(原理+代码+注释) Java十种常见排序方法(原理加代码) 单纯基于比较的排序方法的时间复杂度不能突破O(NlogN),表中最后的三种排序方式复杂度较低。 1.冒泡排序:Java代码:(做了一个小改进) /** * 1.冒泡排序,是通过每一次遍历获取最大/最小值;将最大值/最小值放在尾部/头部; * 然后除开最大值/最小值,剩下的数据在进行遍历获取最大/最小值... * 此处采取最小值放在头部 */ .

黄道婆的专栏 2387

BPMN2.0规范及流程引擎选型方案

本文主要简明扼要的介绍了BPMN2.0规范的内容,可让读者快速度的了解BPMN2.0所涵盖的主要内容和图形样式。也较为详细的阐述了如何绘制标准的流程图,以及在软件层面中如何实现业务流程功能,和技术选型。

比特桃 1万+

Java的六大排序

先创建左右两个临时数组来存储左右两部分已排序的数组,然后通过比较将较小的元素依次放回原数组,最后将剩余的元素也放回原数组。通过一趟排序将待排序的数据分割成两部分,其中一部分的所有元素都比基准元素小,另一部分的所有元素都比基准元素大。采用分治策略,将待排序序列分成两部分,分别对这两部分进行排序,然后将排序好的两部分合并成一个有序序列。,如果是,则将数组分成左右两部分,分别对左右两部分进行归并排序,然后再将两部分已排序的数组合并。把待排序的元素插入到已经排序好的部分序列中的合适位置,使得插入后的序列仍然有序。

Yaml4的博客 1413

ER图从入门到精通:数据库建模全攻略

本文为数据库建模领域的 ER 图全面指南,系统解析从基础概念到实战应用的核心要点。首先介绍 ER 图的定义、三大组成元素(实体、属性、关系)及三种基础关系类型(一对一、一对多、多对多);其次详解绘制流程,涵盖工具选择(如 Visio、PowerDesigner)、需求分析方法及实体 - 属性 - 关系的分步建模技巧;进一步探讨弱实体、复合属性等高级概念,结合范式理论讲解模型优化策略;针对实体属性混淆、关系类型误判等常见问题提供解决方案;最后通过电商系统、图书馆管理系统等实际案例展示 ER 图设计全流程。

邓邓子的博客 4213

Allegro172版本DFM功能介绍

Allegro172版本提供了实时DFM检查的功能,让违反要求的地方实时以DRC的形式报出来,让加工不可加工因素在设计的时候同步避免。打开Constraint,选择Manufacturing, 所有DFM相关DRC都在这。把所有下面DRC开关(DFM,DFA,DFT)都选择on,选择OK。这个规则和物理和间距规则等等都没有关系,单独的一个加工规则。这些DRC大部分是正常的,正常的可以去修改规则来消除。等待DRC刷新,板子上会出现很多DRC,类似下图。下面介绍如何调用和产生DFM规则。一直往下点击next。

weixin_54787054的博客 1338

java实现七种经典排序算法

七种常见排序算法java代码及图示,所有代码均可单独独立运行

诸葛浪 4277

用 CL_ABAP_PARALLEL 把批量处理跑进并行对话进程:资源配额、超时治理与可复制的落地模板

文章摘要: CL_ABAP_PARALLEL是SAP推荐的并行处理工具,适用于时间窗口受限的批量任务处理。它基于aRFC/pRFC机制,通过对话进程实现并行,能将小时级任务压缩到分钟级。使用时需注意版本兼容性(可能需要Note 2791374)、资源限制(会话数、进程数)和任务切片策略。提供两种实现方式:继承式(重定义do方法)和接口式(实现IF_ABAP_PARALLEL)。关键参数包括并发控制(p_percentage)、超时设置(p_timeout)和调试开关(p_debug)。最佳实践建议按业务维度

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 240

java-对象List集合排序方式

对象排序有两种方式实现: 第一种: 实体类中实现Comparable接口,重写compareTo()方法,返回比较的值即可,这一种不常用,不灵活。 第二种: package controllers.admin; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; impo...

qq_38529889的博客 1361

redhawk:avgTW maxTW minTW minWC的区别

分析dynamic ir drop报告时会遇到这几个值,avgTW maxTW minTW minWC,如下图。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 691

假人有限元模型

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

java集合进行排序的两种方式

java集合进行排序的两种方式

qq_27494201的博客 391

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java中Map的几种排序方式

比如根据多个字段或条件排序,可以自定义比较器(Comparator)// 自定义比较器来进行排序.stream()// 根据值降序排列,如果值相等,则按键升序排列= 0)?})));

qq_51976556的博客 1万+

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

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

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java SortedSet TreeSet按指定方式排序 不同方式排序

Java SortedSet TreeSet按指定方式排序 不同方式排序的列子 //实现Things类 class Things{ public String name; public String id; String location; public String arrivetime; Things(String id, String name,String loc

by breeze 1万+

java集合TreeSet的两种排序方式

java集合TreeSet的两种排序方式:          自然排序:①要求添加进TreeSet中的元素所在的类implements Comparable接口 ②重写compareTo(Object obj),在此方法内指明按照元素的哪个属性进行排序 ③向TreeSet中添加元素即可。若不实现此接口,会报运行时异常   定制排序: ①创建一个实现Comparator接口的实现类的对象。在

笑语轻柔 2968

关于Java集合中对象字段的不同排序实现方式

/ 按成绩等级排序:优秀(>=90) > 良好(>=80) > 及格(>=60) > 不及格return 3;选择策略单一自然排序 →Comparable灵活多条件 →Comparator代码规范// Good:清晰的方法引用// Bad:冗长的Lambda工具推荐:自动生成Comparator代码链式比较.compare(other.score, this.score) // 降序.result();示例数据集测试new Student("王五", 20, 88.5),

weixin_52318532的博客 2489

简述Java用哪两种方式来实现集合的排序?

Java 8 引入的方法,直接对列表进行排序,性能更优。不需要修改原始类,可以在不同场景定义不同的比较规则。:可以在外部定义比较规则,无需修改类本身。Java 实现集合排序有哪两种方式?,可以按多个字段进行比较。在实际应用中,如果类有。需要修改类本身,实现。

x² 400

Java 对 List有几种排序的方式?

作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。

smart_an的专栏 362

java中关于如何对TreeSet进行排序的两种方式

这是第一篇java博客 这是一篇关于java中如何对TreeSet进行排序的两种方式。 关于TreeSet TreeSet集合是可以给元素进行重新排序的一个Set接口的实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的Comparator进行排序,具体取决于使用的构造方法。 存储特点: 无序存储,排重,通过二叉树实现的集合,可以给元素进行重新排序。 TreeSet...

weixin_44005203的博客 1146

Java中Arrrays.sort的排序方式

Java中Arrrays.sort的排序方式

Timothy的博客 367

Java中的排序比较方式:自然排序和比较器排序

这里所说到的Java中的排序并不是指插入排序、希尔排序、归并排序等具体的排序算法。而是指执行这些排序算法时,比较两个对象“大小”的比较操作。我们很容易理解整型的 i>j 这样的比较方式,但当我们对多个对象进行排序时,如何比较两个对象的“大小”呢?这样的比较 stu1 > stu2 显然是不可能通过编译的。为了解决如何比较两个对象大小的问题,JDK提供了两个接口 java.lang.Comparab

ITSTAR 1758
上一篇: Tomcat配置Web程序几种方式
下一篇: java数据库操作
海之沐
博客等级 码龄12年 1536粉丝 71原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值