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;ilog(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;iconsole.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;ilog(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);