js中关于排序算法的实现

来源:互联网 发布:windows聚焦图片在哪 编辑:程序博客网 时间:2024/06/06 12:32

关于js中几种排序算法

快速排序

var quickSort = function (arr) {        if (arr.length <= 1) {             return arr;             }        //找到最中间数值的下表            var pivotIndex = Math.floor(arr.length / 2);        //拿到中间数        var pivot = arr.splice(pivotIndex, 1);        //把小于中间数放到left数组中        var left = [];        //把大于中间数放到right数组中        var right = [];        for (var i = 0; i < arr.length; i++) {            if (arr[i] < pivot) {                left.push(arr[i]);            } else {                right.push(arr[i]);            }        }        return quickSort(left).concat([pivot], quickSort(right));    };

冒泡排序

var quickSort1 = function bubbleSort(arr) {        var len = arr.length;        for (var i = 0; i < len; i++) {            for (var j = 0; j < len - 1 - i; j++) {                if (arr[j] > arr[j + 1]) {//相邻元素两两对比                    var temp = arr[j + 1];//元素交换                    arr[j + 1] = arr[j];                    arr[j] = temp;                }            }        }        return arr;    }

选择排序

var  quickSort2 = function selectionSort(arr) {        var len = arr.length;        var minIndex, temp;        for (var i = 0; i < len - 1; i++) {            minIndex = i;            for (var j = i + 1; j < len; j++) {                //寻找最小的数                if (arr[j] < arr[minIndex]) {                    minIndex = j; //将最小数的索引保存                }            }            temp = arr[i];            arr[i] = arr[minIndex];            arr[minIndex] = temp;        }        return arr;    }

插入排序

 var  quickSort3 = function insertionSort(arr) {        var len = arr.length;        var preIndex, current;        for (var i = 1; i < len; i++) {            preIndex = i - 1;            current = arr[i];            while (preIndex >= 0 && arr[preIndex] > current) {                arr[preIndex + 1] = arr[preIndex];                preIndex--;            }            arr[preIndex + 1] = current;        }        return arr;    }

希尔排序

function mergeSort(arr) {  //采用自上而下的递归方法    var len = arr.length;        if (len < 2) {            return arr;        }        var middle = Math.floor(len / 2),            left = arr.slice(0, middle),            right = arr.slice(middle);            return merge(mergeSort(left), mergeSort(right));    }function merge(left, right) {    var result = [];    while (left.length > 0 && right.length > 0) {        if (left[0] <= right[0]) {            result.push(left.shift());            } else {                result.push(right.shift());            }        }        while (left.length){            result.push(left.shift());            }        while (right.length){            result.push(right.shift());            }        return result;    }