package sortPractice;
public class InsertSort {
public InsertSort(int[] nums) {
int i, j = 0, k = 0;
for (i = 1; i < nums.length; i++) {
k = nums[i];
//不能用nums[j]>nums[i]在这个for循环中nums[i]的值可能会被覆盖。
//j >= 0 应该写在前面。
for (j = i - 1; j >= 0 && nums[j] > k; j--)
nums[j + 1] = nums[j];
nums[j + 1] = k;
}//for (i = 1; i < nums.length; i++)
}
public static void main(String[] args) {
int[] nums = new int[]{0, 12, 239, 91, -2, 9282, 112, 32, 134};
InsertSort insertSort = new InsertSort(nums);
for (int num : nums) {
System.out.println(num);
}
}
}
package sortPractice;
public class InsertSort2 {
public InsertSort2(int[] nums) {
int i, j;
for (i = 1; i < nums.length; i++) {
int tmp = nums[i];
//凡是大于tmp的值,都往后移动一位。
for (j = i - 1; j >= 0 && nums[j] > tmp; j--) {
nums[j + 1] = nums[j];
}
//跳出循环时j = -1 或 nums[j] < tmp;
// j = -1表示tmp是当前有序数组中的最小值。
nums[j + 1] = tmp;
}
}
public static void main(String[] args) {
int[] nums = new int[]{0,12, 239, 91, -2, 9282, 112, 32, 134};
InsertSort2 insertSort2 = new InsertSort2(nums);
for (int num : nums) {
System.out.println(num);
}
}
}