天天看点

快速排序(取中位数)

快速排序

function quickSort(list) {
            if (list.length == 0 || list.length == 1) {
                return list;
            }
            //定位枢纽
            let index = Math.floor(list.length / 2);
            //取出枢纽  返回值为数组
            let currentItem = list.splice(index, 1);
            //定义枢纽左边的数组  盛放小于等于枢纽的值
            let leftList = [];
            //定义枢纽右边的数组,盛放大于枢纽的值
            let rightList = [];
            //遍历比较
            list.forEach(item => {
                if (item <= currentItem) {
                    leftList.push(item)
                } else {
                    rightList.push(item)
                }
            });
            //合并三个数组 作为参数 形成递归函数
            return quickSort(leftList).concat(currentItem).concat(quickSort(rightList))
        }


        let arr = [226, 12, 22, 51, 3, 5, 9, 199, 511];
        console.log(quickSort(arr));
           

快速排序的平均效率为:O(N*logN)

继续阅读