js中数组的排序算法

不论是面试还是实际工作中,数组排序我们应该都可以碰到,尤其是在面试的过程中,排序是必问的一项,下面整理的一些排序的算法;

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    var Sort = {}
    Sort.prototype = {
        // 利用sort进行排序
        systemSort:function(array){
            return array.sort(function(a, b){
                return a - b;
            });
        },

        // 冒泡排序
        bubbleSort:function(array){
            var i = 0, len = array.length,
                    j, d;
            for(; i<len; i++){
                for(j=0; j<len; j++){
                    if(array[i] < array[j]){
                        d = array[j];
                        array[j] = array[i];
                        array[i] = d;
                    }
                }
            }
            return array;
        },

        // 快速排序
        quickSort:function(array){
            //var array = [8,4,6,2,7,9,3,5,74,5];
            //var array =[0,1,2,44,4,324,5,65,6,6,34,4,5,6,2,43,5,6,62,43,5,1,4,51,56,76,7,7,2,1,45,4,6,7];
            var i = 0;
            var j = array.length - 1;
            var Sort = function(i, j){
                // 结束条件
                if(i == j ){ return };
                var key = array[i];
                var tempi = i; // 记录开始位置
                var tempj = j; // 记录结束位置

                while(j > i){
                    // j <<-------------- 向前查找
                    if(array[j] >= key){
                        j--;
                    }else{
                        array[i] = array[j]
                        //i++ ------------>>向后查找
                        while(j > ++i){
                            if(array[i] > key){
                                array[j] = array[i];
                                break;
                            }
                        }
                    }
                }
                // 如果第一个取出的 key 是最小的数
                if(tempi == i){
                    Sort(++i, tempj);
                    return ;
                }
                // 最后一个空位留给 key
                array[i] = key;
                // 递归
                Sort(tempi, i);
                Sort(j, tempj);
            }
            Sort(i, j);
            return array;
        },

        // 插入排序
        insertSort:function(array){
            // http://baike.baidu.com/image/d57e99942da24e5dd21b7080
            // http://baike.baidu.com/view/396887.htm
            // var array = [0,1,2,44,4,324,5,65,6,6,34,4,5,6,2,43,5,6,62,43,5,1,4,51,56,76,7,7,2,1,45,4,6,7];
            var i = 1, j, temp, key, len = array.length;
            for(; i < len; i++){
                temp = j = i;
                key = array[j];
                while(--j > -1){
                    if(array[j] > key){
                        array[j+1] = array[j];
                    }else{
                        break;
                    }
                }
                array[j+1] = key;
            }
            return array;
        }
    }
    var array = [13,14,94,33,82,25,59,94,65,23,45,27,73,25,39,10];
   console.log(Sort.prototype.systemSort(array).toString())
   console.log(Sort.prototype.bubbleSort(array).toString())
   console.log(Sort.prototype.quickSort(array).toString())
   console.log(Sort.prototype.insertSort(array).toString())
</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值