Java经典冒泡排序算法的优化解析
思想:在普通冒泡排序的基础上,增加一个flag标志记录,添加一个flag标记,如果该数已经做出排序则置为true,,没有做出排序证明已经是正常顺序,无需再排序,默认flag为false。
代码如下:
public class OptimizationBubbleAlgorithm {
public static void main(String[] args) {
int[] nums={2,7,25,13,6,8};
System.out.println("最初顺序: "+Arrays.toString(nums));
Long startTime=System.currentTimeMillis();
int[] result=bubbleSort(nums);
System.out.println("优化后,六个数据的简单冒泡排序时间(ms):"+(System.currentTimeMillis()-startTime));
System.out.println("最后结果: "+Arrays.toString(result));
}
private static int[] bubbleSort(int[] nums){
int len=nums.length;
if(len==0||len==1){
return nums;
}
boolean flag;
//外层循环 判定一个数要走多少次走到最大位置
for(int i=0;i<len-1;i++){
添加一个flag标记,如果该数已经做出排序则置为true,,没有做出排序证明已经是正常顺序,无需再排序,默认flag为false
flag=false;
//内部循环 判断比较两个数,若前一个数比后一个大则交换位置
for(int j=0;j<len-1-i;j++){
if(nums[j]>nums[j+1]){
int tmp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=tmp;
flag=true;
}
}
System.out.println("第 "+i+"次排序后: "+Arrays.toString(nums));
if(flag==false){
System.out.println("第 "+i+"次排序,跳出for循环");
break;
}
}
return nums;
}
} 输出结果如下:
最初顺序: [2, 7, 25, 13, 6, 8]
第 0次排序后: [2, 7, 13, 6, 8, 25]
第 1次排序后: [2, 7, 6, 8, 13, 25]
第 2次排序后: [2, 6, 7, 8, 13, 25]
第 3次排序后: [2, 6, 7, 8, 13, 25]
第 3次排序,跳出for循环
优化后,六个数据的简单冒泡排序时间(ms):0
最后结果: [2, 6, 7, 8, 13, 25]
结果分析:电脑是i7第九代六核,不优化的基础上是1ms跑完排序代码,可见,优化后,大大提升了效率。
查看10道真题和解析