冒泡排序算法之优化
-
针对问题:
数据的顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到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; }