From 0cf239a812cd8c1bad79070d98c0e0c69f2b7d42 Mon Sep 17 00:00:00 2001 From: Pooja Gupta Date: Tue, 5 Nov 2019 21:28:23 +0530 Subject: [PATCH] Created PigeonHole sorting algorithm --- .../PigeonHole sorting algorithm.cpp | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Data Structure/PigeonHole sorting algorithm.cpp diff --git a/Data Structure/PigeonHole sorting algorithm.cpp b/Data Structure/PigeonHole sorting algorithm.cpp new file mode 100644 index 000000000..174f405b9 --- /dev/null +++ b/Data Structure/PigeonHole sorting algorithm.cpp @@ -0,0 +1,45 @@ +#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; + } +} + +int main() +{ + int arr[] = {9,2,3,8,1,6,9}; + 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; +}