插入排序:
代碼:
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;
}