老师,我觉得取中间的值步骤冗余了

来源:3-13 用 JS 实现快速排序并说明时间复杂度-代码演示和单元测试

慕尼黑7159308

2022-05-19

因为本来就是无序的,所以取哪个值效果都是一样的,直接取第0个就可以,还省去了splice(),循环的时候,直接从i=1去循环

function sortFn(arr) {
        if (arr.length <= 1) return arr;
        let firstVal = arr[0];
        let arrLeft = [];
        let arrRight = [];

        for (let i = 1; i < arr.length; i++) {
            let val = arr[i];
            if (val > firstVal) {
                arrRight.push(val);
            } else {
                arrLeft.push(val);
            }
        }

        return [...sortFn(arrLeft), firstVal, ...sortFn(arrRight)]
    }
写回答

2回答

Gladiator_wyj

2022-07-05

取第一个数为基准点存在一些问题

当数组有序或部分有序且足够大时,取第一个数为基准点时间复杂度会变为O(n^2)

0
1
宅到深处自然萌
你这个说法,取任意位置,复杂度都有可能会变为O(n^2)
2024-06-21
共1条回复

双越

2022-05-19

单元测试能通过即可。

0
0

2周刷完100道前端优质面试真题 双越最新力作

『前端面试真题100道』视频详解

1509 学习 · 642 问题

查看课程