# 插入排序

  • 时间复杂度: O(n²)
  • 空间复杂度: O(1)
function swap(arr, index1, index2) {
    var temp = arr[index1];
    arr[index1] = arr[index2];
    arr[index2] = temp;
}

var initArr = [9,8,7,6,5,4,3];


// 缺点: 不停的swap影响性能
function insertSort(arr) {
    
    var len = arr.length;

    // 边界情况
    if (len < 2) {
        return arr;
    }

    for(let i = 1; i < len; i ++) {
        for (var j = i; j > 0; j --) {

            if (arr[j - 1] > arr[j]) {
                swap(arr, j , j - 1);
            }
        }
    }

    console.log(arr);
}
console.time('优化前');
insertSort(window.testArr);
console.timeEnd('优化前');
console.log(window.count);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 理论上的优化

// 优化: 利用覆盖原则,只swap一次
function swap(arr, index1, index2) {
    var temp = arr[index1];
    arr[index1] = arr[index2];
    arr[index2] = temp;
}

var initArr = [9, 8, 7, 6, 5, 4, 3];


function insertSort(arr) {
    var len = arr.length;

    if (arr.length < 2) {
        return arr;
    }

    for (let i = 1; i < len; i++) {
        var iIndex = i;
        var moveIndex = i - 1;
        var temp = arr[i];
        // var flag = true;
        // debugger;
        // debugger;
        if (arr[iIndex] > arr[moveIndex]) {
            continue;
        }

        //333
        for (let j = i; j > - 1; j--) {
            if (arr[j - 1] < temp) {
                arr[j] = temp;
                break;
            }

            if (!arr[j - 1]) {
                arr[j] = temp;
                break;
            }

            arr[j] = arr[j - 1];
        }

    }
    console.log(arr)
}

console.time('优化后');
insertSort(window.testArr);
console.timeEnd('优化后');
console.log(window.count);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
上次更新: 2021/2/24 上午10:55:31