-
Notifications
You must be signed in to change notification settings - Fork 26
/
solomon-sort.js
30 lines (30 loc) · 994 Bytes
/
solomon-sort.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
export default function solomonSort(array) {
const min = Math.min(...array);
const max = Math.max(...array);
const n = array.length - 1;
const delta = Math.floor((max - min) / n);
let sortedArray = [];
let indexArray = [];
let newArray = [];
for (let i = 0; i < array.length; i++) {
indexArray[i] = 0;
newArray[i] = [];
}
for (let i = 0; i < array.length; i++) {
let newIndex = (array[i] - min) / delta + 1;
newIndex = Math.floor(newIndex);
indexArray[newIndex - 1]++;
newArray[newIndex - 1].push(array[i]);
}
for (let i = 0; i < array.length; i++) {
if (!!newArray[i][0]) {
while (newArray[i].length !== 0) {
let minValue = Math.min(...newArray[i]);
let minIndex = newArray[i].indexOf(minValue);
newArray[i].splice(minIndex, 1);
sortedArray.push(minValue);
}
}
}
return sortedArray;
}