JS实现经典排序算法

/** 选择排序 */
function selectionSort(arr) {
    var minIndex,temp;
    for(var i=0;i<arr.length;i++){
        minIndex = i;
        for(var j=i+1;j<arr.length;j++){
            /** 寻找最小的数 */
            if(arr[j]<arr[minIndex]){
                minIndex = j;
            }
        }
        temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    return arr;
}
var arr = [3,44,38,5,47,15,36,26,27,1,46,4];
console.log("选择排序:"+selectionSort(arr));

function bubbleSort(arr) {
    var len = arr.length;
    var temp,min;
    for(var i=1;i<len;i++){
        if(arr[i]<arr[i-1]){
            temp = arr[i];
            arr[i] = arr[i-1];
            arr[i-1] = temp;
        }
    }
    return arr;
}
console.log("冒泡排序:"+bubbleSort(arr));

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

    }
    return arr;
}
console.log("插入排序:"+insertionSort(arr));

function shellSort(arr) {
    var len = arr.length;
    var d = Math.floor(len/2);

    while(d>0){
        var current,preIndex;
        for(var j=0;j<len;j++){
            for(var i=j+d;i<len;i+=d){
                current = arr[i];
                preIndex = i-d;
                while (preIndex>=0 && arr[preIndex]>current){
                    arr[preIndex+d] = arr[preIndex];
                    preIndex -= d;
                }
                arr[preIndex+d] = current;
            }
        }

        d = Math.floor(d/2);
    }
    return arr;

}
console.log("希尔排序:"+shellSort(arr));

function quickSort(arr) {
    if(arr.length<=1) return arr;
    var pivotIndex = Math.floor(arr.length/2);
    var pivot = arr[pivotIndex];
    var left = [];
    var right = [];
    for(var i=0;i<arr.length;i++){
        if(arr[i]<pivot){
            left.push(arr[i]);
        }else if(arr[i]>pivot){
            right.push(arr[i]);
        }
    }
    return quickSort(left).concat(pivot).concat(quickSort(right));
}
console.log("快速排序:"+quickSort(arr));

参考:http://www.cnblogs.com/dushao/p/6004883.html

原文地址:https://www.cnblogs.com/shuqicui/p/2017-4-6.html