javascript - 在 JavaScript 中使用过滤器进行快速排序

标签 javascript sorting recursion quicksort

我正在使用递归和过滤器进行快速排序,但递归无法正常工作。 它返回到列表的前半部分已排序+额外(上次递归的列表的枢轴和后半部分),但列表的后半部分消失了。 这是我的代码。

const {
  List
} = require('immutable')
const quicksort = function(list) {
  if (list.size <= 1) {
    return list;
  }

  pivot = list.last();
  part1 = list.pop().filter((x) => x <= pivot);
  part2 = list.pop().filter((x) => x > pivot);

  return quicksort(part1).concat(list.last(), quicksort(part2));
};

console.log("quicksort: " + quicksort(List([4, 7, 3, 6, 8, 7, 1, 2, 2, 1, 5])));

然后打印出来

quicksort: List [ 1, 1, 2, 3, 3, 3, 5 ]

第一次调用快速排序,

part1 is [ 4, 3, 1, 2, 2, 1 ]

pivot is 5

part2 is [ 7, 6, 8, 7 ]

基本上,[ 7, 6, 8, 7 ] 就消失了。

我很感激任何见解和建议。谢谢!

最佳答案

缺少

varletconst 声明。如果没有这些,pivotpart1part2 就是全局变量。对 part1 进行排序后,part2 已被覆盖为空列表(因为这是递归的上一个分支的终止情况)。只需您的变量正确本地化即可:p。像这样:

let pivot = list.last();
let part1 = list.pop().filter((x) => x <= pivot);
let part2 = list.pop().filter((x) => x > pivot);

类(class):“使用严格”;

关于javascript - 在 JavaScript 中使用过滤器进行快速排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41993975/

相关文章:

linux - 如何按列对文件内容进行就地排序?

javascript - Handlebars : sorting a list while keeping the original sort index

c++ - munmap_chunk() : invalid pointer: 0x00007fffbef49d90 in a recursive function

JavaScript 测验评分函数

javascript - N个正奇数相乘

javascript - alvarotrigo.com/fullPage/和 bootstrap 3 网格问题

python - 仅在没有调试器的情况下发生的递归错误

javascript - 如何使用 Jquery Ajax 通过 FormData/multipart 上传 Canvas 图像?

python - 为什么这是一个糟糕的冒泡排序算法?

java - 为什么我的递归解决方案会打印重复项?