关于冒泡排序的小优化
今天在看代码的时候,看到一段之前老同事写的冒泡排序代码;发现在内层for排序交换位置的时候,通过增加标识符flag=true/false;可以提前在完成排序的时候,终止循环,避免不必要的排序浪费。记录下来,不是为了说这点小东西还大张旗鼓的写一个小文章,希望自己在这里能学到所谓优化就是精益求精。
点击查看代码
public static void main(String[] args) {
int [] array = {1,2,4,3,4,6,4,9,34,22,4};
//用于优化循环次数,当十个元素,正常需要冒泡九次,但是如果数组在冒泡第五次的时候顺序就已经是从小到大排序好了,后面的循环就多余了
boolean flag = true;
//相邻元素交换,存储交换值
int val = 0;
//记录交换次数
int count = 0;
for(int i=0;i<array.length-1; i++) {
//-i-i: 每冒泡一次,都会确定一次最大的元素,放在最后一位,所以每次内循环就可以减少一次循环次数
for(int j=0;j<array.length-1-i;j++) {
flag = false;
if(array[j]>array[j+1]) { //冒泡
val = array[j];
array[j] = array[j+1];
array[j+1] = val;
flag = true; //记录是否交换元素,如果没有交换,则退出循环
}
}
if(flag==false) {
System.out.println("排序结束");
break;
}
count++;
//輸出每次排序結果
System.out.println(Arrays.toString(array));
}
System.out.println(Arrays.toString(array));
System.out.println("冒泡次数:"+count);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能