记录排序算法的第一种:冒泡排序。
以下图为例:
第一趟的代码实现:
for (int j = 0; j < 3; j++) {//第一趟比较3次
if (array[j] > array[j+1]){//如果前面的数较大就要和后一个数字交换位置
int temp = 0;//临时变量同来交换
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
第二趟的代码实现:
for (int j = 0; j < 2; j++) {//第二趟比较2次
if (array[j] > array[j+1]){//如果前面的数较大就要和后一个数字交换位置
int temp = 0;//临时变量同来交换
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
第三趟代码实现:
for (int j = 0; j < 1; j++) {//第三趟比较1次
if (array[j] > array[j+1]){//如果前面的数较大就要和后一个数字交换位置
int temp = 0;//临时变量同来交换
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
经过3趟循环,无序的数组已经变得有序。
不难发现:一个长度为n的数组,需要进行排序的趟数为:n-1;每一趟中需要比较的次数:n-k次,k为当前的第k趟。
放进一个循环中:
for (int i = 1; i < array.length; i++){
boolean flag = true;//判断一下这一趟有没有变化,没变化就默认为true
for (int j = 0; j < array.length - i; j++){
if (array[j] > array[j+1]){//准备发生变化,那就要flag置为false
flag = false;
int temp;//临时变量交换
temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
}
System.out.println("第" + (i+1) + "趟变化后的结果为:" + Arrays.toString(array));
if (flag){//如果为true,没有发生变化,可以结束了
break;
}
}
进行了一点小优化:如果在某一趟中,一次交换都没有发生,那么是不是已经有序了呢?这时候就可以跳出循环了。