冒泡排序算法之优化

  • 针对问题:
    数据的顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到arr.length-1次,后面的比较没有意义的。

  • 方案:
    设置标志位flag,如果发生了交换flag设置为true;如果没有交换就设置为false。
    这样当一轮比较结束后如果flag仍为false,即:这一轮没有发生交换,说明数据的顺序已经排好,没有必要继续进行下去。

  • 代码:
        public int[] bubble(int[] array){
            boolean flag;//是否交换的标志
            for(int i = 0;i < array.length-1;i++){
                flag = false;// 每次遍历标志位都要先置为false,才能判断后面的元素是否发生了交换
                for(int j = 0;j < array.length-i-1;j++) {
                    if (array[j] > array[j + 1]) {
                        array[j] = array[j] ^ array[j + 1];
                        array[j + 1] = array[j] ^ array[j + 1];
                        array[j] = array[j] ^ array[j + 1];
                        flag = true; //只要有发生了交换,flag就置为true
                    }
                }
                if(!flag) break;
            }
            return array;
        }
    

      

posted on 2019-08-18 00:33  时间刺客mht  阅读(202)  评论(0编辑  收藏  举报

导航