javascript - 按正态分布(高斯分布)对数字数组进行排序

原文 标签 javascript sorting gaussian normal-distribution

有一个数字数组setOfNumbers = [0, 3, 3, 2, 7, 1, -2, 9]我想对这个集合进行排序,使其末尾和开头的数字最小,而排序集的中心最大,就像这样 sortedSetNumbers = [0, 2, 3, 9, 7, 3, 1, -2] .

const setOfNumbers = [0, 3, 3, 2, 7, 1, -2, 9];
const result = [0, 2, 3, 9, 7, 3, 1, -2];

function sortNormal(a, b) {
  return true; // Please, change this line
}

const sortedSetNumbers = setOfNumbers.sort((a, b) => sortNormal(a, b));



if (sortedSetNumbers === result) {
  console.info('Succeeded Normal Distributed');
} else {
  console.warn('Failed Normal Distribution');
}

console.log(sortedSetNumbers);


我确信可以使用 Array.prototype.sort() 方法对这些数字进行排序。 ,但是这个排序函数应该是什么样子的呢?

编辑:解决方案不必用.sort() 解决。 .那只是一个想法。

最佳答案

这可能是最幼稚的做法了,但不就是简单的左、右、左、右……排序后吗?

const input    = [0, 3, 3, 2, 7, 1, -2, 9];
const expected = [0, 2, 3, 9, 7, 3, 1, -2];

const sorted   = input.slice().sort();
const output   = [];
let side       = true;

while (sorted.length) {
  output[side ? 'unshift' : 'push'](sorted.pop());
  side = !side;
}

console.log(expected.join());
console.log(output.join());



或者简单地说:

const input  = [0, 3, 3, 2, 7, 1, -2, 9];
const output = input.slice().sort().reduceRight((acc, val, i) => {
  return i % 2 === 0 ? [...acc, val] : [val, ...acc];
}, []);

console.log(output.join());

关于javascript - 按正态分布(高斯分布)对数字数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54420458/

相关文章:

javascript - jQuery高级选择检测并单击

javascript - javascript自然排序

javascript - 使用 jQuery 按字母顺序对选项元素进行排序

c# - C# 中的 List.Orderby 第一个顺序是偶数上升的数字,然后是奇数下降的相同数字

machine-learning - 高斯过程中的核函数

javascript - AngularJS Accordion 使用 ng 重复打开检查

javascript - 使用包含时 JQuery-UI 可调整大小的顶部和右侧错误

javascript - 调用controlgroup .click()方法

image-processing - 带FFT的高斯模糊

opencv - OpenCV-高斯噪声