数组排序 : 桶排序和快速排序

▼魔方 西西 提交于 2020-03-08 17:46:07

桶排序

原理 : 数组下标会自动排序 没有的部分用empty代替

    function sort(arr) {
        var newArr = []; //定义一个新数组
        //遍历数组 取出原数组的每一位
        for(var i = 0 ; i < arr.length ; i ++) { 
        //把原数组的每一位的值当作新数组的下标 并随意赋值(数组下标会自动排序)
            newArr[arr[i]] = 1 ; 
        }
        arr.length = 0; //清空原数组
        //取出新数组的下标
        for(var key in newArr)  { 
            arr.push(+ key); //转换为数字再赋给原数组
        }
        return arr; //返回原数组
    }

快速排序

原理 : 利用递归 找中点 分左右

    function sort(arr) {
        //递归出口
        if(arr.length === 1 || arr.length === 0) {
            return arr;
        }
        // 找中间下标和中间值
        var mid_index = parseInt(arr.length / 2); //中间下标
        var mid_value = arr[mid_index]; //中间值
        var left = [];
        var right = [];
        //遍历数组
        for(var i = 0 ;i < arr.length ; i ++) {  
            if(i === mid_index) { //当遍历到自己时直接跳过
                continue;
            }
            if(arr[i] < mid_value) { //小于中间值
                left.push(arr[i]); //放到左边的数组中
            }else{
                right.push(arr[i]); //相反放到右边的数组中
            }
        }
        //数组拼接 中间值必须变为数组
        return sort(left).concat([mid_value] , sort(right)); 
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!