package paixu;
//冒泡排序从小到大排序
public class maopao {
public static void main(String[] args) {
// TODO Auto-generated method stub
int shuzu[]={12,11,3,53,22,43,534};//创建数组
int i;
int j;
int temp;
for(i=0;i<shuzu.length-1;i++){
flag=0;
for(j=0;j<shuzu.length-1-i;j++){
if(shuzu[j]>shuzu[j+1]){
temp=shuzu[j];
shuzu[j]=shuzu[j+1];
shuzu[j+1]=temp;
flag=1;
}
}
}
for(int k=0;k<shuzu.length;k++){
System.out.print(shuzu[k]);
System.out.print(' ');
}
}
}
优化1:添加一个flag来减少循环次数
package paixu;
//冒泡排序从小到大排序
public class maopao {
public static void main(String[] args) {
// TODO Auto-generated method stub
int shuzu[]={12,11,3,53,22,43,534};//创建数组
int i;
int j;
int temp;
int flag=0;
for(i=0;i<shuzu.length-1;i++){
flag=0;
for(j=0;j<shuzu.length-1-i;j++){
if(shuzu[j]>shuzu[j+1]){
temp=shuzu[j];
shuzu[j]=shuzu[j+1];
shuzu[j+1]=temp;
flag=1;
}
}
if(flag==0){
break;
}
}
for(int k=0;k<shuzu.length;k++){
System.out.print(shuzu[k]);
System.out.print(' ');
}
}
}
优化二:记录下上次循环最后一次交换的位置
package paixu;
//冒泡排序从小到大排序
public class maopao {
public static void main(String[] args) {
// TODO Auto-generated method stub
int shuzu[]={12,11,3,53,22,43,534};//创建数组
int i;
int j;
int temp;
int flag=0;
int cos=shuzu.length-1;
int p=0;
for(i=0;i<shuzu.length-1;i++){
flag=0;
for(j=0;j<cos;j++){
if(shuzu[j]>shuzu[j+1]){
temp=shuzu[j];
shuzu[j]=shuzu[j+1];
shuzu[j+1]=temp;
flag=1;
p=j;
}
}
if(flag==0){
break;
}
cos=p;
}
for(int k=0;k<shuzu.length;k++){
System.out.print(shuzu[k]);
System.out.print(' ');
}
}
}
其实第一层循环用while更好。
本文详细介绍了冒泡排序算法的基本实现及其两种优化方法。首先,通过添加一个标志位来减少不必要的循环,当一轮循环中没有发生元素交换时,说明数组已经有序,可以提前结束排序过程。其次,记录上一次交换元素的位置,将后续的比较范围限制在这个位置之前,进一步提高排序效率。这些优化策略能够显著提升冒泡排序在实际应用中的性能。
1631

被折叠的 条评论
为什么被折叠?



