【问题标题】:quick sort using filter in JavaScript在 JavaScript 中使用过滤器进行快速排序
【发布时间】:2017-06-19 00:54:40
【问题描述】:

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

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 ]

第一次调用快速排序,

第 1 部分是 [ 4, 3, 1, 2, 2, 1 ]

轴心为 5

第 2 部分是 [ 7, 6, 8, 7 ]

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

感谢任何见解和建议。谢谢!

【问题讨论】:

    标签: javascript sorting recursion quicksort


    【解决方案1】:

    varletconst 声明缺失。没有这些,pivotpart1part2全局变量。在对part1 进行排序后,part2 已被覆盖为一个空列表(因为这是递归前一个分支的终止情况)。只需let 你的变量是正确的本地:p。像这样:

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

    课程"use strict";

    【讨论】:

    • 我明白了。这解释了很多。它现在有效!非常感谢!
    猜你喜欢
    • 2019-03-10
    • 2022-11-13
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 2011-07-08
    相关资源
    最近更新 更多