首页 > 解决方案 > JS 上的快速排序

问题描述

我正在读一本关于算法的书。作家使用 python 作为示例代码。下面是他在 python 上的快速排序

def quicksort(array):
  if len(array) < 2:
    # base case, arrays with 0 or 1 element are already "sorted"
    return array
  else:
    # recursive case
    pivot = array[0]
    # sub-array of all the elements less than the pivot
    less = [i for i in array[1:] if i <= pivot]
    # sub-array of all the elements greater than the pivot
    greater = [i for i in array[1:] if i > pivot]
    return quicksort(less) + [pivot] + quicksort(greater)

print(quicksort([10, 5, 2, 3])) //returns [2, 3, 5, 10] 

我试着写同样的,但在 JS 上。下面是我的功能。但它不能正常工作

function a (array){
    if (array.length<2){
            return array
    }
    else{
    const pivot = array.shift() 
    less = array.filter(value => value <= pivot);
    greater = array.filter(value => value > pivot);
    let answer = a(less).concat((pivot), a(greater));
    
    answer = answer.concat(a(greater));
    return  answer
    }      
}
console.log(a([[2, 3, 5, 10])) //returns [2, 3, 3, 5, 3, 3, 10, 3, 3]

我以为问题出在变量上,所以我更改了代码并返回正确

function a (array){
    if (array.length<2){
            return array
    }
    else{
    const pivot = array.shift() 
    less = array.filter(value => value <= pivot);
    let answer = a(less).concat(pivot);
    greater = array.filter(value => value > pivot);
    answer = answer.concat(a(greater));
    return  answer
    }      
}
console.log(a([[2, 3, 5, 10])) //returns [2, 3, 5, 10]

你能帮我在我的第一个例子中有什么问题吗?我也在 github 上查看了本书的 js 代码示例,但它与我的非常相似

标签: javascriptpythonalgorithmsorting

解决方案


推荐阅读