使用JavaScript中的过滤器快速排序

时间:2017-02-02 03:59:10

标签: javascript sorting recursion quicksort

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

cf login

并打印出来

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,

  

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

     

pivot是5

     

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

基本上,quicksort: List [ 1, 1, 2, 3, 3, 3, 5 ] 就会消失。

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

1 个答案:

答案 0 :(得分:3)

缺少

varletconst声明。如果没有这些,pivotpart1part2都是全局变量。排序part1后,part2已被覆盖为空列表(因为这是递归前一个分支的终止情况)。只需let您的vars适当本地化:p。像这样:

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

课程"use strict";