-
Notifications
You must be signed in to change notification settings - Fork 0
/
advanced_sleepsort.js
30 lines (28 loc) · 898 Bytes
/
advanced_sleepsort.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
/**
* Sorts an array of integers. Speed is configurable.
* @param {array} arr The array to sorted
* @param {number} speed How fast to sort the array
* @returns A promise that will be fulfilled with the sorted array
*/
async function sleepsort(arr, speed = 0) {
const max_n = arr.reduce((a,b) => Math.max(a,b));
let time_speedup = max_n * speed;
if (speed <= 1) {
time_speedup = 1;
}
return new Promise((fulfill) => {
sorted = [];
for (let n of arr) {
if (n === max_n) {
setTimeout(() => {
sorted.push(n);
fulfill(sorted);
}, n / time_speedup);
} else {
setTimeout(() => sorted.push(n), n / time_speedup);
}
}
})
}
const arr = [20, 5, 100, 1, 90, 200, 40, 29];
sleepsort(arr).then(sorted => console.log(sorted))