网站首页 > java教程 正文
Java数组的排序
在程序设计中,有时需要将一组数据进行排序,方便统计与查询数据。
程序常用的排序方法有冒泡排序、选择排序等。
冒泡排序算法定义
使用冒泡排序时,排序数组元素的过程总是小数往前放,大数往后放,类似水中气泡往上升的动作,所以称作冒泡排序。同时也可以大数往前,小数在后,倒序排列,是冒泡排序变形。
冒泡排序的基本思想是对比相邻的元素值,如果满足条件就交换元素值, 把较小的元素移动到数组前面,把较大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部,同样,也可以逆排序。
计算过程
冒泡算法由双层循环实现,其中外层循环用于控制排序轮数,是要排序的数组长度减 1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。比数组长度少1次。
外层循环需要进行array.length-1轮排序,因为每一轮排序都会将当前数组中最大的元素移动到末尾,因此最后一个元素是不需要比较的。
内层循环主要用于对比数组中每个临近元素两两对比大小,根据正逆排序确定是否交换位置,对比和交换次数以排序轮数而减少。两两相比,循环次数小于数组长度减1,用j+1表示最后一个数。
内层循环需要比较arr.length-i-1对相邻元素,因为每一轮排序都会将当前未排序的部分中最大的元素移动到末尾,每次增加一个大数不再参与排序,因此未排序的部分的长度会逐渐缩小。
第一轮外层循环时把最大的元素值一步一步移动到了最后面,第二轮外层循环不再对比最后一个元素值最大数,已经到头了。
需要从头对比和移动的是其他剩余元素,减少1个元素。其他循环将依此类推,继续完成排序任务。
算法实现过程
在项目中创建 BubbleSort类,这个类的代码将实现冒泡排序的一个演示,要求冒泡排序改成倒序排序。
public class BubbleSort {
//冒泡排序方法
public void sort(int[] array) {
for (int i = 1; i < array. length; i++) {
// 比较相邻两个元素,较大的数往前排
for (int j = 0; j < array. length - i; j++) {
if (array[j] <array[j + 1]) {/*如果前一个元素比后一个元素小,则两元素互换*/
int temp = array[j]; // 把第一个元素值保存到临时变量中
array[j] = array[j+ 1]; /./ 把第二个元素值保存到第一个元素单元中
array[j + 1] = temp; // 把临时变量(也就是第一个元素原值) 保存到第二个元素中)
showArray(array); // 输出冒泡排序后的数组元素
/*显示数组中的所有元素*/
/*要显示的数组*/
public void showArray(int[] array) {
System. out. println("冒泡排序的结果: ");
for (int i : array) ( // 遍历数组
System. out. print(i + " "); // 输出每个数组元素值
}
System. out. println();
public static void main(String[] args) {
// 创建一个数组,这个数组元素是乱序的
int[] array = { 63, 4, 24, 1, 3, 15 };
// 创建冒泡排序类的对象
BubbleSort sorter = new BubbleSort();
// 调用排序方法将数组排序
sorter. sort(array);
}
).
运行结果
冒泡排序的结果:
63 24 15 4 3 1
- 上一篇: java冒泡排序(Java冒泡排序算法)
- 下一篇: 干货丨什么是Java三元运算符?基本用法有哪些?
猜你喜欢
- 2024-09-25 java冒泡排序(Java冒泡排序算法)
- 2024-09-25 好程序员Java学习路线分享冒泡排序及优化
- 2024-09-25 五分钟学会一个初级算法:冒泡排序
- 2024-09-25 Java冒泡排序-大白话解释(java冒泡排序的方法代码)
- 2024-09-25 C#基础语法循环篇:冒泡排序算法讲解(附源码)
- 2024-09-25 排序算法之冒泡排序(冒泡排序 算法)
- 2024-09-25 经典排序算法之——冒泡排序(冒泡排序算法实例)
- 2024-09-25 Java十大排序算法之冒泡排序(java冒泡排序和快速排序)
- 2024-09-25 JAVA手写算法 | 冒泡排序算法(java简单冒泡排序写法)
- 2024-09-25 用java实现冒泡排序(使用java实现冒泡排序)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)