From 9c1ac04eaba8dfe123ec720fca01f4fac4576f5a Mon Sep 17 00:00:00 2001 From: manan-shxrma <78374257+manan-shxrma@users.noreply.github.com> Date: Fri, 1 Oct 2021 22:34:31 +0530 Subject: [PATCH] Create pigeonhole_sort MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this a sorting algorithm that is suitable for sorting lists of elements where the number of elements and the number of possible key values are approximately the same. It requires O(n + Range) time where n is number of elements in input array and ‘Range’ is number of possible values in array. --- Arrays/pigeonhole_sort | 53 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 Arrays/pigeonhole_sort diff --git a/Arrays/pigeonhole_sort b/Arrays/pigeonhole_sort new file mode 100644 index 0000000..83743c7 --- /dev/null +++ b/Arrays/pigeonhole_sort @@ -0,0 +1,53 @@ +#include +using namespace std; + +/* Sorts the array using pigeonhole algorithm */ +void pigeonholeSort(int arr[], int n) +{ + // Find minimum and maximum values in arr[] + int min = arr[0], max = arr[0]; + for (int i = 1; i < n; i++) + { + if (arr[i] < min) + min = arr[i]; + if (arr[i] > max) + max = arr[i]; + } + int range = max - min + 1; // Find range + + // Create an array of vectors. Size of array + // range. Each vector represents a hole that + // is going to contain matching elements. + vector holes[range]; + + // Traverse through input array and put every + // element in its respective hole + for (int i = 0; i < n; i++) + holes[arr[i]-min].push_back(arr[i]); + + // Traverse through all holes one by one. For + // every hole, take its elements and put in + // array. + int index = 0; // index in sorted array + for (int i = 0; i < range; i++) + { + vector::iterator it; + for (it = holes[i].begin(); it != holes[i].end(); ++it) + arr[index++] = *it; + } +} + +// Driver program to test the above function +int main() +{ + int arr[] = {8, 3, 2, 7, 4, 6, 8}; + int n = sizeof(arr)/sizeof(arr[0]); + + pigeonholeSort(arr, n); + + printf("Sorted order is : "); + for (int i = 0; i < n; i++) + printf("%d ", arr[i]); + + return 0; +}