【发布时间】:2019-09-09 07:58:10
【问题描述】:
我一直在研究这个问题,但我无法让我的分区函数工作。我递增起始值,直到它达到一个小于枢轴的值,反之亦然,我的结束指针。我用我的开始和端点交换值。然后我用我的开始和支点交换价值。我错过了什么吗?
function quickSort(arr, start, end) {
if (start >= end) {
return
}
let index = partition(arr, start, end)
quickSort(arr, start, index - 1)
quickSort(arr, index + 1, end)
return arr
}
function partition(arr, start, end) {
let pivotIndex = end
let pivotValue = arr[end]
let endPointer = arr[end - 1] //end pointer start w/ value left of pivot
while (start <= end) {
if (arr[start] < pivotValue) {
start++
} else {
swap(arr,start, endPointer)
}
if (arr[endPointer] > pivotValue) {
endPointer--
} else {
swap(arr,start, endPointer)
}
}
swap(arr,start, pivotIndex)
return start
}
function swap(arr, a, b) {
let temp = arr[a]
arr[a] = arr[b]
arr[b] = temp
}
let arr = [0,5,2,1,6,3]
console.log(quickSort(arr, 0, arr.length - 1))
【问题讨论】:
标签: javascript arrays quicksort partitioning