我写了一个函数来执行 wave-sort如下所示。生成的数组应该以比下一个更大的数字开头,但我的代码没有这样做。例如,如果输入是:
[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;
}
最佳答案
您已明确设计您的函数以较低的值开始。
在第一个 if
中,您检测到第一个值大于第二个值的情况,如果是,则交换它们(当 i = 1
时):
if (arr[i-1] > arr[i]) {
所以在索引 0 处得到的值比在索引 1 处得到的值小是正常的。
如果您希望您的阵列以“波高”开始,则更改两个 if
中的条件:
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;
}
var waved = waveSort([73, 80, 40, 86, 14, 96, 10, 56, 61, 84, 82, 36, 85]);
console.log(JSON.stringify(waved));
关于javascript - Javascript 中的波浪排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45507065/