插入排序:
代码:
public static void main(String[] args) {
int[] a = suiji();
System.out.println(Arrays.toString(a));
System.out.println("---------------------");
sort(a);
System.out.println("----------------------");
System.out.println(Arrays.toString(a));
}
public static void sort(int[] a) {
for (int i = 1; i < a.length; i++) {
for (int j = i - 1; j >= 0; j--) {
if (a[j] > a[j + 1]) {
swap(a, j, j + 1);
System.out.println(Arrays.toString(a));
} else {
break;
}
}
}
}
public static int[] suiji() {
int length = 5 + new Random().nextInt(6);
int[] aa = new int[length];
for (int i = 0; i < aa.length; i++) {
aa[i] = new Random().nextInt(100);
}
return aa;
}
插入排序的核心先是第一二个数比较大小,保证前小后大,循环最外层相当于是一个“旗帜”。旗帜在哪(就拿这个数往前插),往前循环比大小,因为之前的顺序是排好的,只需要碰到更小的,插到前面就行了(不符合的就break,这里优化了效果)。以此类推。如下可供参考:

冒泡排序:
代码:
public static void main(String[] args) {
int[] a = suiji();
System.out.println(Arrays.toString(a));
System.out.println("----------------------");
sort1(a);
System.out.println("-----------------------");
System.out.println(Arrays.toString(a));
}
public static void sort1(int[] a) {
for (int i = 0; i < a.length; i++) {
for (int j = a.length - 1; j > i; j--) {
if (a[j - 1] > a[j]) {
swap(a, j - 1, j);
System.out.println(Arrays.toString(a));
}
}
}
}
public static int[] suiji() {
int len = 5 + new Random().nextInt(6);
int[] a = new int[len];
for (int i = 0; i < a.length; i++) {
a[i] = new Random().nextInt(100);
}
return a;
}

18万+

被折叠的 条评论
为什么被折叠?



