冒泡排序优化
冒泡排序的基础算法有哪些缺点
- 每一曾比较都要比较到数组的最后,但是没有必要,只要比较到无序数列就可以了(无序数列即没有排过序的数组元素所组成的序列)
- 不管是否有序,都要进行N-1次循环,
- 在内层循环定义的temp,则每次循环都要开辟一个空间,浪费内存。
可以从哪几个方面来对基础算法进行优化?
- 定义一个boolean类型的变量flag,默认为true(有序),发生交换,则为false,一趟循环结束后,根据flag的值判断是否有序,若为true,则退出循环。
- 内循环比较 数组.lenght-1-i;
- 将temp变量定义在循环外
public class TestBubble {
public static void main(String[] args) {
//定义一个数组
int[] array = {54,8,6,1,5,29,6,8,25,694,59};
int temp;
boolean flag;
for(int i =0; i<array.length-1; i++) {
flag = true;//默认为有序的
for(int j = 0 ; j<array.length-1-i;j++) {
if(array[j] > array[j+1]) {
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
flag = false;//数组中无序,发生交换
}
}
if(flag) {
break;//退出循环
}
}
System.out.println("排序后:" + Arrays.toString(array));
}
}