繁体   English   中英

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

[英]quick sort using filter in JavaScript

我正在使用递归和过滤器进行快速排序,但是递归不能正常工作。 它返回排序后+多余的列表的前半部分(上次递归后的数据透视表和后半部分),但列表的后半部分消失了。 这是我的代码。

 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 ]

第一次调用quicksort,

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

枢轴是5

part2是[7,6,8,7]

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

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

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

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

教训"use strict";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM