2017-02-02 36 views
0

我正在使用遞歸和過濾器進行快速排序,但遞歸無法正常工作。 它返回列表的前半部分,排序+額外(從上一次遞歸的樞軸和列表的後半部分),但列表的後半部分消失。 這是我的代碼。在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 ] 

第一次快速排序被調用時,

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

p ivot是5

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

和基本上,[ 7, 6, 8, 7 ]剛好消失。

我很感謝任何見解和建議。謝謝!

回答

3

var,letconst聲明丟失。沒有這些,pivotpart1part2全局變量。在排序part1之後,part2已被覆蓋爲空列表(因爲這是遞歸的前一分支的終止情況)。只是let你的變數是正確的地方:第。就像這樣:

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

"use strict";

+0

我明白了。這解釋了很多。它現在工作!非常感謝! –

相關問題