[英]Sort one array according to the other array using quick sort in 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 ]
就消失了。
我感谢任何见解和建议。 谢谢!
var
, let
或const
声明丢失。 没有它们, pivot
, part1
和part2
是全局变量 。 在对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.