插入排序
将数组分为两个区间,已排序区间与未排序区间,初始已排序区间只有第一个元素,其核心思想是取未排序区间的元素,在已排序好的区间合适的位置插入,保证已排序数据一直有序,重复这个过程,直到未排序区间中元素为空。
思路:一个类两个方法,一个 swap 方法,一个 InsertSort 方法,先思考临界条件,两层 for 循环:第一层 for 循环,遍历未排区域,第二个 for 循环,0~i -1 的遍历,并且比较大小,j > i ,发生交换。
package suanfa;
public class InsertionSort {
public static void InsertionSort01(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
for (int i = 1; i < arr.length; i++) { //i 是未排区域,遍历未排区域
for (int j = i - 1; j >= 0 && arr[j] > arr[j+1]; j--) { //j >= 0 不越界,j 是已排区域,需要循环比较
swap(arr, j+1, j); //注意这里是没有 i 的哈,只能用 j+1,代替
+1
}
}
}
public static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
public static void main(String[] args) {
int[] arr = { 0, 51, -94, 65, 888 };
System.out.println(java.util.Arrays.toString(arr));
InsertionSort01(arr);
System.out.println(java.util.Arrays.toString(arr));
}
}
注意了呀,第二个for循环中是没有 第一个 for 循环中 i 临时变量的啊啊啊啊
2.
j >= 0