diff --git a/C++/Pigeonhole_Sort.cpp b/C++/Pigeonhole_Sort.cpp new file mode 100644 index 0000000..7c14c52 --- /dev/null +++ b/C++/Pigeonhole_Sort.cpp @@ -0,0 +1,52 @@ +/* C program to implement Pigeonhole Sort */ +#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; +} diff --git a/C++/Primefactor.cpp b/C++/Primefactor.cpp new file mode 100644 index 0000000..1dd5b97 --- /dev/null +++ b/C++/Primefactor.cpp @@ -0,0 +1,41 @@ +// C++ program to print all prime factors +#include +using namespace std; + +// A function to print all prime +// factors of a given number n +void primeFactors(int n) +{ + // Print the number of 2s that divide n + while (n % 2 == 0) + { + cout << 2 << " "; + n = n/2; + } + + // n must be odd at this point. So we can skip + // one element (Note i = i +2) + for (int i = 3; i <= sqrt(n); i = i + 2) + { + // While i divides n, print i and divide n + while (n % i == 0) + { + cout << i << " "; + n = n/i; + } + } + + // This condition is to handle the case when n + // is a prime number greater than 2 + if (n > 2) + cout << n << " "; +} + +/* Driver code */ +int main() +{ + int n = 315; + primeFactors(n); + return 0; +} + diff --git a/C++/Radix_sort.cpp b/C++/Radix_sort.cpp new file mode 100644 index 0000000..36b69a8 --- /dev/null +++ b/C++/Radix_sort.cpp @@ -0,0 +1,75 @@ +// C++ implementation of Radix Sort + +#include +using namespace std; + +// A utility function to get maximum value in arr[] +int getMax(int arr[], int n) +{ + int mx = arr[0]; + for (int i = 1; i < n; i++) + if (arr[i] > mx) + mx = arr[i]; + return mx; +} + +// A function to do counting sort of arr[] according to +// the digit represented by exp. +void countSort(int arr[], int n, int exp) +{ + int output[n]; // output array + int i, count[10] = { 0 }; + + // Store count of occurrences in count[] + for (i = 0; i < n; i++) + count[(arr[i] / exp) % 10]++; + + // Change count[i] so that count[i] now contains actual + // position of this digit in output[] + for (i = 1; i < 10; i++) + count[i] += count[i - 1]; + + // Build the output array + for (i = n - 1; i >= 0; i--) { + output[count[(arr[i] / exp) % 10] - 1] = arr[i]; + count[(arr[i] / exp) % 10]--; + } + + // Copy the output array to arr[], so that arr[] now + // contains sorted numbers according to current digit + for (i = 0; i < n; i++) + arr[i] = output[i]; +} + +// The main function to that sorts arr[] of size n using +// Radix Sort +void radixsort(int arr[], int n) +{ + // Find the maximum number to know number of digits + int m = getMax(arr, n); + + // Do counting sort for every digit. Note that instead + // of passing digit number, exp is passed. exp is 10^i + // where i is current digit number + for (int exp = 1; m / exp > 0; exp *= 10) + countSort(arr, n, exp); +} + +// A utility function to print an array +void print(int arr[], int n) +{ + for (int i = 0; i < n; i++) + cout << arr[i] << " "; +} + +// Driver Code +int main() +{ + int arr[] = { 170, 45, 75, 90, 802, 24, 2, 66 }; + int n = sizeof(arr) / sizeof(arr[0]); + + // Function Call + radixsort(arr, n); + print(arr, n); + return 0; +}