-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinsertion-sort.js
More file actions
29 lines (23 loc) · 916 Bytes
/
insertion-sort.js
File metadata and controls
29 lines (23 loc) · 916 Bytes
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
// Agarro todos los elementos menos uno, los ordeno recursivamente
// e inserto el que me quedo donde corresponde
const insertionSort = (xs) => {
if (xs.length < 2) return xs;
const init = xs.slice(0, -1);
const last = xs.pop();
return insert(last, insertionSort(init));
};
const insert = (x, xs) => {
for (let i = 0; i <= xs.length; i++) {
if (x < xs[i]) {
return [...xs.slice(0, i), x, ...xs.slice(i)];
}
}
return [...xs, x];
};
// Para testear la igualdad de las listas en base a los elementos
const arraysEqual = (xs, ys) => JSON.stringify(xs) === JSON.stringify(ys);
console.log(arraysEqual(insertionSort([2, 3, 1]), [1, 2, 3]));
console.log(arraysEqual(insertionSort([1]), [1]));
console.log(arraysEqual(insertionSort([22, 1, 3, 1]), [1, 1, 3, 22]));
console.log(arraysEqual(insertionSort([251, 10, 1, 1]), [1, 1, 10, 251]));
console.log(arraysEqual(insertionSort([]), []));