排序算法和二分法查找

  • 请添补代码,使mySort()能使传入的参数根据从小到大的递次显示出来。

function mySort() {
    var tags = new Array();
    for (var i = 0; i < arguments.length; i++) {
        tags.push(arguments[i]);
    }
    tags.sort(function sortNum(a, b) {
        return a - b;
    });
    return tags;
}

var result = mySort(50, 11, 16, 32, 24, 99, 57, 100);
console.info(result);
  • 冒泡排序

function bubbleSort(arr) {
    for (var i = 0; i < arr.length; i++) {
        for (var j = 0; j < arr.length - i; j++) {
            var temp = 0;
            // ">" 从小到大排序
            // "<" 从大到小排序
            if (arr[j] > arr[j + 1]) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    return arr;
}
  • 疾速排序

 function quickSort(elements) {
    if (elements.length <= 1) {
        return elements;
    }
    var pivotIndex = Math.floor(elements.length / 2);
    var pivot = elements.splice(pivotIndex, 1)[0];
    var left = [];
    var right = [];
    for (var i = 0; i < elements.length; i++) {
        if (elements[i] < pivot) {
            left.push(elements[i]);
        } else {
            right.push(elements[i]);
        }
    }
    return quickSort(left).concat([pivot], quickSort(right));
}
  • 插入排序

insertSort = function (elements) {
    var i = 1,
        j, step, key, len = elements.length;
    for (; i < len; i++) {
        step = j = i;
        key = elements[j];
        while (--j > -1) {
            if (elements[j] > key) {
                elements[j + 1] = elements[j];
            } else {
                break;
            }
        }
        elements[j + 1] = key;
    }
    return elements;
};
  • 二分查找-递归要领

function binarySearch(arr, key, leftIndex, rightIndex) {
    if (leftIndex > rightIndex) {
        return -1;
    }
    var mid = parseInt((leftIndex + rightIndex) / 2);
    if (arr[mid] == key) {
        return mid;
    } else if (arr[mid] > key) {
        rightIndex = mid - 1;
        return binarySearch(arr, key, leftIndex, rightIndex);
    } else if (arr[mid] < key) {
        leftIndex = mid + 1;
        return binarySearch(arr, key, leftIndex, rightIndex);
    }
}
  • 二分查找-非递归要领

function binarySearch(arr, key) {
    var leftIndex = 0,
        rightIndex = arr.length - 1;
    while (leftIndex <= rightIndex) {
        var mid = parseInt((leftIndex + rightIndex) / 2);
        if (arr[mid] == key) {
            return mid;
        } else if (arr[mid] < key) {
            leftIndex = mid + 1;
        } else if (arr[mid] > key) {
            rightIndex = mid - 1;
        } else {
            return -1;
        }
    }
}
    原文作者:whjin
    原文地址: https://segmentfault.com/a/1190000009016020
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞