不理解这个冒泡为什么这样写
//可以这样优化一下只比较前面
public class MaoPaoSort {
public static void main(String[] args) {
int[] arr = new int[] {5,3,7,2,9,1,4,8};
int temp = 0;
for(int i = 1; i < arr.length; i++) {
for(int j = 0; j < i; j++) {
if(arr[i] < arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
一样的呀。
i=1,j=0
i=0,j=1
i=0,j=i+1
都可以
从逻辑上来说,有一种向前冒泡,和向后冒泡的算法。
public static void main(String[] args) {
int [] num={1,5,9,6,4,8,7,3,14};
//向数组索引大的一方依次排序。
// for (int i = 0; i < num.length-1; i++) {
// for (int j = 0; j < num.length-1-i; j++) {
// if(num[j] > num[j+1]){
// int temp = num[j];
// num[j] = num[j+1];
// num[j+1] = temp;
// }
// }
// }
//向数组索引小的一方依次排序。
for (int i = 0; i < num.length-1; i++) {
for (int j = i+1; j < num.length; j++) {
if(num[i] >num[j]){
int temp = num[j];
num[j] = num[i];
num[i] = temp;
}
}
}
System.out.println(MyArrays.toString(num));
}
其实他是一轮将最大值或最小值排在最后面里面的for循环控制的将最大值或最小值排到数组末尾,外面的for循环控制次数
i是不动啊,没有体现两两比较啊,真的不是选择吗?我再去看下选择和冒泡。
每一次内层循环都会将i下标所代表位置选为最大值,因为每一次比较小标i右边都会选出最大值替换之,且每一次内存循环完i所代表下标位置的左边都会排好从小到大的顺序。刚开始可以只看左边,它是先排好两个数的,然后在两个数的基础上排好三个数,再排好四个数,依次往后
就是定义一个空值,然后循环进行比较,把拿到的最大的数放进去