Skip to content

Commit 0a1e69c

Browse files
committed
Added Pigeon Hole Sort
1 parent 42522be commit 0a1e69c

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

Sorts/pigeon_hole_sort.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
export default function pigeonholeSort(unsortedArray) {
2+
3+
if (!Array.isArray(unsortedArray)) {
4+
throw new Error(`pigeonholeSort() expects an array! Found ${typeof unsortedArray}.`);
5+
}
6+
7+
const pigeonhole = [];
8+
9+
unsortedArray.forEach(number => {
10+
if (isNaN(number)) {
11+
throw new Error(`pigeonholeSort() expects an array of numbers! Found ${typeof number}.`);
12+
}
13+
// Add each number to its respective pigeonhole
14+
if (pigeonhole[number]) pigeonhole[number].push(number);
15+
else pigeonhole[number] = [number];
16+
});
17+
18+
// Use reduce to flatten an array of arrays!
19+
return pigeonhole.reduce((a, b) => a.concat(b), []);
20+
21+
}
22+
const unsortedArray = [721, 4, 117, 13, 10, 880, 4, 117, 88];
23+
const sortedArray = [4, 4, 10, 13, 88, 117, 117, 721, 880];
24+
25+
pigeonholeSort(unsortedArray)

0 commit comments

Comments
 (0)