Javascript中的Wave排序
我已经编写了一个函数来执行,如下所示。结果数组应该以一个比下一个大的数字开始,但我的代码没有这样做。例如,如果输入为:Javascript中的Wave排序,javascript,algorithm,sorting,Javascript,Algorithm,Sorting,我已经编写了一个函数来执行,如下所示。结果数组应该以一个比下一个大的数字开始,但我的代码没有这样做。例如,如果输入为: [73, 80, 40, 86, 14, 96, 10, 56, 61, 84, 82, 36, 85] …它的输出为 [ 86, 96, 84, 85, 80, 82, 61, 73, 40, 56, 14, 36, 10 ] 而不是以比下一个更大的数字开始,即96 function waveSort(arr){ arr = arr.sort(function(a
[73, 80, 40, 86, 14, 96, 10, 56, 61, 84, 82, 36, 85]
…它的输出为
[ 86, 96, 84, 85, 80, 82, 61, 73, 40, 56, 14, 36, 10 ]
而不是以比下一个更大的数字开始,即96
function waveSort(arr){
arr = arr.sort(function(a, b) {
return b - a;
});
for (var i = 1; i < arr.length; i += 2) {
if (arr[i-1] > arr[i]) {
var temp = arr[i];
arr[i] = arr[i-1];
arr[i-1] = temp;
}
if (i+1 < arr.length && arr[i+1] > arr[i]) {
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
return arr;
}
功能波排序(arr){
arr=arr.sort(函数(a,b){
返回b-a;
});
对于(变量i=1;iarr[i]){
var-temp=arr[i];
arr[i]=arr[i-1];
arr[i-1]=温度;
}
如果(i+1arr[i]){
温度=arr[i];
arr[i]=arr[i+1];
arr[i+1]=温度;
}
}
返回arr;
}
您已经明确地将函数设计为以较低的值开始
在第一个中,如果检测到第一个值大于第二个值的情况,如果是,则交换它们(当i=1
):
因此,通常情况下,索引0处的值小于索引1处的值
如果希望阵列以“波高”开始,请更改两个If
s中的条件:
功能波排序(arr){
arr=arr.sort(函数(a,b){
返回b-a;
});
对于(变量i=1;i log(JSON.stringify(waved))代码>您已经明确地将函数设计为以较低的值开始
在第一个中,如果检测到第一个值大于第二个值的情况,如果是,则交换它们(当i=1
):
因此,通常情况下,索引0处的值小于索引1处的值
如果希望阵列以“波高”开始,请更改两个If
s中的条件:
功能波排序(arr){
arr=arr.sort(函数(a,b){
返回b-a;
});
对于(变量i=1;i功能波排序(arr){
arr.sort((a,b)=>b-a);
对于(var i=1;i函数波排序(arr){
arr.sort((a,b)=>b-a);
对于(var i=1;i另一种方法是定义交换函数并在实际函数中调用它,如:
const swap=(arr,i,j)=>([arr[i],arr[j]]=[arr[j],arr[i]]);
常量波排序=(arr)=>{
arr=arr.sort((a,b)=>b-a);
对于(设i=1;i console.log(JSON.stringify(waved));
另一种方法是定义交换函数并在实际函数中调用它,如:
const swap=(arr,i,j)=>([arr[i],arr[j]]=[arr[j],arr[i]]);
常量波排序=(arr)=>{
arr=arr.sort((a,b)=>b-a);
对于(设i=1;i log(JSON.stringify(waved))
为什么你认为它应该以一个更大的值开始?事实上,你正在测试第一个if
,如果是真的,你将先交换较小的值,然后再交换较大的值。你期望什么?有更好的wavesort解决方案吗?为什么你认为它应该以一个较大的值开始?事实上,你在第一个if中正在测试这一点代码>,如果为真,则先交换较小的值,再交换较大的值。您期望得到什么?是否有更好的wavesort解决方案?
if (arr[i-1] > arr[i]) {
function waveSort(arr){
arr.sort((a,b)=>b-a);
for(var i=1;i<arr.length;i+=2){
var tmp = arr[i];
arr[i]=arr[i+1];
arr[i+1]=tmp;
}
return arr;
}
var wavesorted = waveSort([73, 80, 40, 86, 14, 96, 10, 56, 61, 84, 82, 36, 85]);
console.log(wavesorted);