js实现几种排序算法

从排序的方法来讲:一般分为交换、插入、选择、合并等,交换方式的排序有:冒泡排序、快速排序;插入方式的排序有:希尔排序;选择方式的排序有:堆排序。

冒泡排序

算法原理描述:比较相邻的元素。如果第一个比第二个大,就交换他们两个。第一对做完后,然后对第二对(即第二个数和第三个数)比较,若前一个比后一个大,就交换他们,依次对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。最后的元素应该会是最大的数,最后一个不需要再做比较,所以是比较length-1次。

function bubbleSort(arr){
    var temp,nLen=arr.length-1;
    for (var i = 0; i <nLen; i++){
        for (var j = 0; j < nLen-i; j++){
            if(arr[j]>arr[j+1]){
                temp = arr[j+1];
                arr[j+1] = arr[j];
                arr[j] = temp;
            }
        }
    }
    return arr;
}

alert(bubbleSort([3,6,4,1,5,8]).join(""));

时间复杂度为:O(n^2)

 

快速排序

算法原理描述:找到一个中间的数,然后把所有比这个数小的放到这个数前面,把所有比这个数大的放到后面,这样完成一趟,依次对前面一段数据和后面一段数据进行前面步骤的递归。

 

var quickSort = function(arr) {
    if (arr.length <= 1) { return arr; }
    var mIndex = Math.floor(arr.length / 2);
    var mid = arr.splice(mIndex, 1)[0];
    var left = [],right = [];
    for (var i = 0; i < arr.length; i++){
        if (arr[i] < mid) {
            left.push(arr[i]);
        } else {
            right.push(arr[i]);
        }
    }
    return quickSort(left).concat([mid], quickSort(right));
}

alert(quickSort([3,6,4,1,5,8]).join(""));

 

时间复杂度为:O(n^2)

 

插入排序

排序原理描述:将一系列无序的元素,往一个有序的元素序列里面插入,形成一个有序的序列。插入的时候,将无序的元素序列中每个元素依次和有序的数组最后一个元素开始比较,如果比该元素小,则和该元素交换位置,依次比较,找到一个最合适的位置,即比前一个元素大,比后一个元素小。

 

/*直接插入排序*/
var
arr = [3,6,9,2,8,4]; function insertSort(arr){ var nLen = arr.length,temp; //从第二开始,第一个默认为有序 for (var i = 1; i < nLen; i++){ temp = arr[i]; //对无序的元素,依次和前面有序的数组元素比较, //如果更小,则和前一个元素调换位置 for (var j = i; j>0 && temp < arr[j-1]; j--){ arr[j] = arr[j-1]; arr[j-1] = temp; } } return arr; } alert(insertSort(arr).join(""));
/*希尔排序*/
var arr = [3,6,9,2,8,4];
function insertSort(arr){
    //增量直接插入排序

    return arr;
}
alert(insertSort(arr).join(""));

 

时间复杂度为:O(n^2)

 选择排序

排序原理描述:

posted on 2013-08-29 17:07  golden_wind  阅读(755)  评论(0编辑  收藏  举报