冒泡排序
import java.util.Arrays; public class Test { public static void main(String[] args) { int[]a={100,5,8,9,2,12,3,89,0,65,5,8,12,1}; a = bubbleSort(a); System.out.println(Arrays.toString(a)); } /** * (1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换。 (2)这样对数组的第 0 个数据到 N-1 个数据进行一次遍历后,最大的一个数据就“沉”到数组第 N-1 个位置。 (3)N=N-1,如果 N 不为 0 就重复前面二步,否则排序完成。 * 数组[0,1,6,5],长度为4 * 第一轮两两比较 0跟1比,不用交换,1跟6比,不用交换,6跟5比,交换位置,结果为[0,1,5,6],比较结束后,最后一个是最大值了,此时比较了3次 * 第二轮两两比较,此时最后一位不用比了,相当于只比较[0,1,5] 0跟1比,不用交换,1跟5比,不用交换,此时比较了2次 * 第三轮两两比较,此时最后一位不用比了,相当于只比较[0,1] 0跟1比,此时比较了1次 * 由此可以知道:比较的轮数为长度4-1=3轮,每轮比较的次数为数组长度减去第几轮,如第一轮为4-1=3,第二轮为4-2=2,第三轮为4-3=1 * 每一轮最后一个数字的索引为数据长度-轮数,如第一轮的5,索引为4-1=3,第二轮的5,索引为4-2=2,第三轮的1,索引为4-3=1 */ public static int[] bubbleSort(int[]arr){ if(arr==null || arr.length==0){ return arr; } //外层循环代表比较的轮数,总轮数是长度-1,轮数从1开始 for (int i = 1; i <= arr.length-1; i++) { //内层循环代表该轮下比较的次数,该论比较的总次数等于数组长度减去第几轮,下面为何不是j<=j<arr.length-i呢?因为j最大是arr.length-i,但因为下面有j+1,所以防止数组越界,这里小于它 for(int j=0;j<arr.length-i;j++){ int temp; if(arr[j]>arr[j+1]){//如果索引为j的数据比下一位大,则交换位置,这里j+1最大值就是arr.length-i,也就是每次比较的最大位 temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } return arr; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】