插入排序之JavaScript实现

一. 算法思想与伪代码

插入排序是一种较简单的排序算法,其工作方式像排序扑克牌一样。开始时左手为空且桌子上牌面向下。然后,每次从桌子上拿走一张牌并将其插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与手中的每张牌进行比较。拿在左手上的牌总是排序好的。将排序过程命名为INSERTION-SORT,类比这个思路,可以得出插入排序的伪代码:

INSERTION-SORT(A):

for j = 2 to A.length
    key = A[j]
    // 将A[j]插入到已排序的序列A[1..j-1]中
    i = j - 1
    while i > 0 and A[i] > key
        A[i +1] = A[i]
        i = i - 1
    A[i + 1] = key 


二. 算法分析

根据其伪代码可以看出,排序过程实际是一个双层嵌套循环。这种双层嵌套循环的排序算法,在所有排序算法中的效率算是比较低的。实际的时间复杂度与输入序列是否已排好序有关:

1. 若输入序列是已排序的,则出现最佳情况,时间复杂度为O(n)

2. 若输入序列是已反向排序的,则出现最坏情况,时间复杂度为O(n2),即O(n的平方)

3. 平均时间复杂度也是O(n2)


三. 算法的JavaScript实现

根据上述伪代码,可以很容易地使用JavaScript实现。伪代码中认为序列的初始下标为1,而JavaScript中数组的初始下标为0,应注意区分。代码清单如下:

function insertSort(arr) {
    var j, i, key;
    for (j = 1; j < arr.length; j++) {
        key = arr[j];
        i = j - 1;
        while (i > -1 && arr[i] > key) {
            arr[i + 1] = arr[i];
            i = i - 1;
        }
        arr[i + 1] = key;
    }
}

你可能感兴趣的:(算法与数据结构,JavaScript)