优化冒泡排序

   日期:2020-10-03     浏览:114    评论:0    
核心提示:问题:给定一个整型数组, 实现冒泡排序 (升序排序)一般我们写出来的是这个代码:public static void bubbleSort(int[] array) { for(int i = 0;i < array.length -1;i++) { if(array[i] > array[i+1]) { int temp = array[i]; array[i] = array[i+1

问题:
给定一个整型数组, 实现冒泡排序 (升序排序)

一般我们写出来的是这个代码:

public static void bubbleSort(int[] array) { 
        for(int i = 0;i < array.length -1;i++) { 
            if(array[i] > array[i+1]) { 
                int temp = array[i];
                array[i] = array[i+1];
                array[i+1] = temp;
            }
        }
    }
    public static void main(String[] args) { 
        int[] array = { 6,8,13,2,9};
        bubbleSort(array);
        System.out.println(Arrays.toString(array));
    }

这个代码呢,不能说他错,但是呢大家都会写,在面试的时候就体现不出来自己的优势,所以我们需要对这个代码进行优化:

1、第一轮的判断将整个数组的最大值放在了最后面,第二轮的判断是将除过第一次选出的最大值以外的剩余数字中的最大值放在了倒数第二位,我们已经知道从后往前是从大到小的顺序已经排好,所以我们没必要每次都进行最后一个数字和前一个数字的比较,我们可以再加个循环,用来减少判断每次后面已经排好的顺序,只进行前面数字的比较排序即可。



第3趟:

第4趟:

2、我们需要判断数组是否已经排好序,防止重复比较
分为两种:一就是给定的数组本身就是有序的,二就是数组在排序的过程中就已排好

下面给出我们优化后的代码:

public static void bubbleSort(int[] array) { 
        for(int i = 0;i < array.length -1;i++) { 
            boolean flg = true;//标记
            for (int j = 0; j < array.length-1-i; j++){ 
                if (array[j] > array[j + 1]) { 
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    flg = false;
                }
            }
            if(flg == true) { 
                break; // 说明给定的数组是排好序的数组
            }
        }
    }
    public static void main(String[] args) { 
        int[] array = { 6,8,13,2,9};
        bubbleSort(array);
        System.out.println(Arrays.toString(array));
    }

运行结果:

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服