java算法-冒泡排序
冒泡排序的特点:
>相邻位置比较,如果约定从大到小排序,每一轮比较完成,可以排好一个小的,如果从小到大,每一轮比较完成,可以在末尾排好一个大的
我们用随机数组进行比较,把每轮的结果打印出来,就知道,冒泡排序的规律了:
package com.ghostwu; import java.util.Random; class MyBubbleSort { private int[] arr; public MyBubbleSort(){ arr = new int[10]; Random rand = new Random(); for( int i = 0; i < arr.length; i++ ){ arr[i] = rand.nextInt( 101 ); } } public void sort(){ for( int i = 0; i < arr.length; i++ ){ for( int j = 0; j < ( arr.length - i - 1 ); j++ ){ if( arr[j] > arr[j+1] ) { int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } display( "第" + ( i + 1 ) + "轮的比较结果: " ); } } public void display( String info ){ System.out.println( info ); for( int i = 0; i < arr.length; i++ ){ System.out.print( arr[i] + "\t" ); } System.out.println(); } } public class BubbleSort{ public static void main( String[] args ){ MyBubbleSort bs = new MyBubbleSort(); bs.display( "排序之前:" ); bs.sort(); bs.display( "排序之后:" ); } }
执行结果:
ghostwu@dev:~/java/data_struct/sort$ !javac javac -d . BubbleSort.java ghostwu@dev:~/java/data_struct/sort$ java com.ghostwu.BubbleSort 排序之前: 27 93 9 25 6 98 39 84 56 19 第1轮的比较结果: 27 9 25 6 93 39 84 56 19 98 第2轮的比较结果: 9 25 6 27 39 84 56 19 93 98 第3轮的比较结果: 9 6 25 27 39 56 19 84 93 98 第4轮的比较结果: 6 9 25 27 39 19 56 84 93 98 第5轮的比较结果: 6 9 25 27 19 39 56 84 93 98 第6轮的比较结果: 6 9 25 19 27 39 56 84 93 98 第7轮的比较结果: 6 9 19 25 27 39 56 84 93 98 第8轮的比较结果: 6 9 19 25 27 39 56 84 93 98 第9轮的比较结果: 6 9 19 25 27 39 56 84 93 98 第10轮的比较结果: 6 9 19 25 27 39 56 84 93 98 排序之后: 6 9 19 25 27 39 56 84 93 98
从上面的结果,可以看出,第7轮已经排好序了。后面的3轮完全没有必要,浪费CPU的计算时间,所以,我们可以完善一下上面的程序,用一个变量来标记,是否已经排好序了。
改进后的程序:
package com.ghostwu; import java.util.Random; class MyBubbleSort { private int[] arr; public MyBubbleSort(){ arr = new int[10]; Random rand = new Random(); for( int i = 0; i < arr.length; i++ ){ arr[i] = rand.nextInt( 101 ); } } public void sort(){ boolean flag = true; for( int i = 0; i < arr.length; i++ ){ flag = true; for( int j = 0; j < ( arr.length - i - 1 ); j++ ){ if( arr[j] > arr[j+1] ) { int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; flag = false; } } if( flag ) break; display( "第" + ( i + 1 ) + "轮的比较结果: " ); } } public void display( String info ){ System.out.println( info ); for( int i = 0; i < arr.length; i++ ){ System.out.print( arr[i] + "\t" ); } System.out.println(); } } public class BubbleSort{ public static void main( String[] args ){ MyBubbleSort bs = new MyBubbleSort(); bs.display( "排序之前:" ); bs.sort(); bs.display( "排序之后:" ); } }
执行结果:
ghostwu@dev:~/java/data_struct/sort$ java com.ghostwu.BubbleSort 排序之前: 9 71 79 0 31 11 75 65 68 36 第1轮的比较结果: 9 71 0 31 11 75 65 68 36 79 第2轮的比较结果: 9 0 31 11 71 65 68 36 75 79 第3轮的比较结果: 0 9 11 31 65 68 36 71 75 79 第4轮的比较结果: 0 9 11 31 65 36 68 71 75 79 第5轮的比较结果: 0 9 11 31 36 65 68 71 75 79 排序之后: 0 9 11 31 36 65 68 71 75 79
作者:ghostwu, 出处:http://www.cnblogs.com/ghostwu
博客大多数文章均属原创,欢迎转载,且在文章页面明显位置给出原文连接
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架