插入排序

118 阅读1分钟

插入排序
* 插入排序将数组分为排序区域和非排序区域,每次将
* 排序区域的值和排序区域的比较,找到合适的位置然后
* 插入。
* 非排序区域的值和排序区域的值的比较时是从排序区域的后面
* 往前面依次比较

public static int[] insertSort(int[] nums) {
    int n = nums.length;
    if (n <= 1) return nums;
    for (int i = 1; i < n; i++) {
        int value = nums[i];
        int j = i - 1;
        for (; j >= 0; j--) {
            if (nums[j] > value) {
                nums[j+1] = nums[j];
            }else {
                break;
            }
        }
        nums[j+1] = value;
    }
    return nums;
}

由于插入排序只需要一个额外的变量来存储被插入的数值,所以插入排序的空间复杂度是O(1),所以是原地排序
* 又因为插入排序不会改变两个相同的元素的位置,所以插入排序是稳定的排序