JavaScript快速排序递归

JavaScript快速排序递归,javascript,quicksort,Javascript,Quicksort,我试图在JavaScript中为int数组实现一个快速排序算法。 我的代码有问题。前几个整数得到了很好的排序,但在sortet数组的末尾,总是有一个整数被放置了很多次,尽管它在数组中只有一次应该被排序。希望有人会发现我的错。 谢谢 函数快速排序(数组){ var randomPlace=Math.round(Math.random()*array.length); var pivotelement=数组[randomPlace]; 左=新数组; 右=新数组; 对于(var i=0;i

我试图在JavaScript中为int数组实现一个快速排序算法。 我的代码有问题。前几个整数得到了很好的排序,但在sortet数组的末尾,总是有一个整数被放置了很多次,尽管它在数组中只有一次应该被排序。希望有人会发现我的错。 谢谢

函数快速排序(数组){
var randomPlace=Math.round(Math.random()*array.length);
var pivotelement=数组[randomPlace];
左=新数组;
右=新数组;
对于(var i=0;i
我认为您错误地识别了
随机位置。由于您使用的是
Math.round()
,它有时会返回
undefined

请尝试以下方法:

var randomPlace = Math.floor(Math.random() * array.length);
另外,在初始化
左侧
右侧
时,请使用以下代码:

var left = new Array();
var right = new Array();
此外,您还需要将
数组[i]
中的
pivot
更改为
pivot元素


你可以看到我完整的小提琴

我想你把
随机位置
识别错了。由于您使用的是
Math.round()
,它有时会返回
undefined

请尝试以下方法:

var randomPlace = Math.floor(Math.random() * array.length);
另外,在初始化
左侧
右侧
时,请使用以下代码:

var left = new Array();
var right = new Array();
此外,您还需要将
数组[i]
中的
pivot
更改为
pivot元素


你可以看到我完整的小提琴

除了一些命名混乱之外,比如
pivotelement
vs
pivot
Math.round
vs
Math.floor
,你需要解决的问题是,例如
[1,1,1]
总是返回
左=[]
右=[1,1]
,它调用
快速排序([1,1,1])
无限期

要解决此问题,需要检查每个元素是否为空
left
,以及
right
是否等于随机轴。然后返回
right
,而不再次调用
quicksort

函数快速排序(数组){
var randomPlace=Math.floor(Math.random()*array.length),
pivot=数组[randomPlace],
左=[],
右=[],
我
对于(i=0;i如果(left.length除了一些命名混乱之外,比如
pivotelement
vs
pivot
Math.round
vs
Math.floor
,您需要解决
[1,1,1]
这个问题,它总是返回
left=[]
right=[1,1]
,调用
快速排序([1,1,1])
无限期

要解决此问题,您需要检查每个元素是否为空
left
right
,如果它等于随机轴。然后返回
right
,而无需再次调用
快速排序

函数快速排序(数组){
var randomPlace=Math.floor(Math.random()*array.length),
pivot=数组[randomPlace],
左=[],
右=[],
我
对于(i=0;i如果(left.length这里有一个用JS编写的quick sort的简短版本,与中看到的一模一样,希望这有帮助

var partition = function (arr, low, high) {
    var x = arr[high]
    var i = low - 1
    for (var j = low; j <= high - 1; j++) {
        if (arr[j] <= x) {
            i++
            var temp = arr[i]
            arr[i] = arr[j]
            arr[j] = temp
        }
    }
    var temp = arr[i + 1]
    arr[i + 1] = arr[high]
    arr[high] = temp
    return i + 1 
}

var quickSort = function (arr, low, high) {
    if (low < high) {
        index = partition(arr,low,high)
        if (low < index-1) quickSort(arr,low,index-1)
        if (index+1 < high) quickSort(arr,index+1,high)
    }
}

var list2 = [1000,13,12,1001,82,1,2,4,3,0]

console.log(quickSort(list2,0,list2.length))
var分区=功能(arr、低、高){
var x=arr[高]
变量i=低-1

对于(var j=low;j,这里有一个用JS编写的快速排序的简短版本,与中所示完全相同,希望这有帮助

var partition = function (arr, low, high) {
    var x = arr[high]
    var i = low - 1
    for (var j = low; j <= high - 1; j++) {
        if (arr[j] <= x) {
            i++
            var temp = arr[i]
            arr[i] = arr[j]
            arr[j] = temp
        }
    }
    var temp = arr[i + 1]
    arr[i + 1] = arr[high]
    arr[high] = temp
    return i + 1 
}

var quickSort = function (arr, low, high) {
    if (low < high) {
        index = partition(arr,low,high)
        if (low < index-1) quickSort(arr,low,index-1)
        if (index+1 < high) quickSort(arr,index+1,high)
    }
}

var list2 = [1000,13,12,1001,82,1,2,4,3,0]

console.log(quickSort(list2,0,list2.length))
var分区=功能(arr、低、高){
var x=arr[高]
变量i=低-1
对于(var j=低;j的可能重复