- 33
- 0
function quickSort(arr) {
let len = arr.length
if(len <= 1) {
return arr
}
let middle = Math.floor(len / 2)
let middleArr = [arr[middle]]
let left = []
let right = []
for(let i = 0; i < len; i ++) {
console.log(count ++, middle, arr[middle])
if(i == middle) {
continue
}
if(arr[i] > arr[middle]){
left.push(arr[i])
} else if(arr[i] < arr[middle]) {
right.push(arr[i])
} else {
middleArr.push(arr[i])
}
}
// 递归
return [...quickSort(left), ...middleArr, ...quickSort(right)]
}
// 这是没有优化尾部迭代的算法,如果数组过大,会照成溢出,那么优化的思路是怎样的?百度的方式太模糊了 0
打赏
收藏
点击回答
您的回答被采纳后将获得:提问者悬赏的 10 元积分
- 共 0 条
- 全部回答
-
枫舞琉璃 普通会员 1楼
在JavaScript中,快速排序的优化主要包括以下几点:
-
选择合适的基准元素:在快速排序中,基准元素的选择对性能有很大影响。一个好的选择方法是选择一个中间元素,这样可以保证快速排序在平均情况下的时间复杂度为O(nlogn)。
-
预处理数据:如果数据已经部分排序,那么可以考虑使用插入排序等简单排序算法来处理这些数据,这样可以减少递归的深度,提高性能。
-
优化递归:在递归过程中,可以使用尾递归优化,即每次递归调用时都返回上一层的递归调用,这样可以减少栈的深度,提高性能。
-
限制递归深度:在实现快速排序时,需要限制递归深度,避免在递归深度过深时发生栈溢出。可以通过设置一个递归深度的阈值,当递归深度超过这个阈值时,就停止递归,转而使用其他排序算法。
-
使用分治法:快速排序是一种分治算法,通过将问题分解为较小的子问题,然后递归地解决这些子问题,最终得到原问题的解。这种方式可以避免递归深度过深的问题。
-
优化递归:递归是快速排序的主要实现方式,但递归可能会导致栈溢出的问题。可以通过设置递归深度的阈值,或者使用尾递归优化等方式来避免这个问题。
-
使用记忆化:记忆化是一种优化技术,可以帮助我们更快地计算出已经计算过的结果,从而避免重复计算。在快速排序中,可以通过使用记忆化来避免重复计算。
-
使用并行化:如果数据量较大,那么可以考虑使用并行化来提高性能。可以通过使用多线程或者分布式系统来实现并行化。
-
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
