javascript之算法查询

冒泡排序 – 时间复杂度O(n^2)

//冒泡排序
function bubbleSort(A) {
    for (var i = 0; i < A.length; i++) {
        var sorted = true;
    //注意:内循环是倒着来的
        for (var j = A.length - 1; j > i; j--) {
            if (A[j] < A[j - 1]) {
                swap(A, j, j - 1);
                sorted = false;                   
            }
        }
        if (sorted) {
            return;
        }
    }
}

选择排序 – 时间复杂度O(n^2)

//选择排序
//思路:找到最小值的下标记下来,再交换
function selectionSort(A) {
    for (var i = 0; i < A.length - 1; i++) {
        var k = i;
        for (var j = i + 1; j < A.length; j++) {
            if (A[j] < A[k]) {
                k = j;
            }
        }
        if (k != i) {
            var t = A[k];
            A[k] = A[i];
            A[i] = t;
            println(A);
        }
    }
    return A;
}

插入排序 – 时间复杂度O(n^2)

//插入排序
//假定当前元素之前的元素已经排好序,先把自己的位置空出来,
//然后前面比自己大的元素依次向后移,直到空出一个"坑",
//然后把目标元素插入"坑"function insertSort(A) {
    for (var i = 1; i < A.length; i++) {
        var x = A[i];
        for (var j = i - 1; j >= 0 && A[j] > x; j--) {
            A[j + 1] = A[j];
        }
        if (A[j + 1] != x) {
            A[j + 1] = x;
            println(A);
        }
    }
    return A;
}