八大排序之一:冒泡排序

public static void bubbleSort(int[] array) {
//临时变量
int tempVar;
//外层for,判断我们要比较多少次 这里是9次
for (int i = 0; i < array.length - 1; i++) {
//内层for,比较两个数,如果第一个数,比第二个数大,就交换位置
//{5, 2, 1, 3, 4, 9, 7, 8, 10, 6};
for (int j = 0; j < array.length-1-i; j++) {
//这里用 > 号,会外层跑完一圈,会沉淀一个最小的数在数组尾部, (降序)
// 如果用了<号,外层跑完一圈,就会沉淀出一个最大的数在数组尾部(升序)
if (array[j+1] > array[j]) {
tempVar = array[j+1];
array[j+1] = array[j];
array[j] = tempVar;
}
}

}
}
优化:我们加了一个 boolean flag;//用来减少无意义的比较
//比如:假如需要升序 ,但是{1 ,2 ,3 ,4 ,5} 这个数组已经默认排好序了,我们外层for就只要跑一圈就可以了.
// 内层for 全部跑完,发现没有交换的数值,然后就可以把flag设置为false了,避免了外层for再次执行....
public static void bubbleSort(int[] array) {
//临时变量
int tempVar;
//外层for,判断我们要比较多少次 这里是9次
for (int i = 0; i < array.length - 1; i++) {
      int flag = false;
//内层for,比较两个数,如果第一个数,比第二个数大,就交换位置
//{5, 2, 1, 3, 4, 9, 7, 8, 10, 6};
for (int j = 0; j < array.length-1-i; j++) {
//这里用 > 号,会外层跑完一圈,会沉淀一个最小的数在数组尾部, (降序)
// 如果用了<号,外层跑完一圈,就会沉淀出一个最大的数在数组尾部(升序)
if (array[j+1] > array[j]) {
tempVar = array[j+1];
array[j+1] = array[j];
array[j] = tempVar;
          flag = true;//设置为true 说明外层for还需要继续跑下去
}
        if(flag==false){
         break;//如果经过一波内存循环,flag还是为false就直接结束外层循环了.
        }
}
}
}



猜你喜欢

转载自www.cnblogs.com/shenyueshuo/p/12925787.html