Skip to content

Commit 0abade4

Browse files
committed
sorting: add pigeonhole sorting
1 parent f73a65e commit 0abade4

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

Sorting/PigeonholeSort.cpp

+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#include <bits/stdc++.h>
2+
using namespace std;
3+
4+
void pigeonholeSort(int arr[], int n)
5+
{
6+
int min = arr[0], max = arr[0];
7+
for (int i = 1; i < n; i++)
8+
{
9+
if (arr[i] < min)
10+
min = arr[i];
11+
if (arr[i] > max)
12+
max = arr[i];
13+
}
14+
int range = max - min + 1; // Find range
15+
16+
vector<int> holes[range];
17+
18+
for (int i = 0; i < n; i++)
19+
holes[arr[i]-min].push_back(arr[i]);
20+
21+
int index = 0; // index in sorted array
22+
for (int i = 0; i < range; i++)
23+
{
24+
vector<int>::iterator it;
25+
for (it = holes[i].begin(); it != holes[i].end(); ++it)
26+
arr[index++] = *it;
27+
}
28+
}
29+
30+
int main()
31+
{
32+
int arr[] = {8, 3, 2, 7, 4, 6, 8};
33+
int n = sizeof(arr)/sizeof(arr[0]);
34+
35+
pigeonholeSort(arr, n);
36+
37+
printf("Sorted order is : ");
38+
for (int i = 0; i < n; i++)
39+
printf("%d ", arr[i]);
40+
41+
return 0;
42+
}

0 commit comments

Comments
 (0)