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