From e52617f9a209d62e879068c14854a0990c87dec4 Mon Sep 17 00:00:00 2001 From: pikaachu09 <72344695+pikaachu09@users.noreply.github.com> Date: Tue, 11 Oct 2022 02:56:50 +0530 Subject: [PATCH 1/4] Create radix.cpp --- Sorting/Radix Sort/radix.cpp | 75 ++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Sorting/Radix Sort/radix.cpp diff --git a/Sorting/Radix Sort/radix.cpp b/Sorting/Radix Sort/radix.cpp new file mode 100644 index 0000000..36b69a8 --- /dev/null +++ b/Sorting/Radix Sort/radix.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; +} From a93e2e32eb2535332c6f74658c434933eedfded2 Mon Sep 17 00:00:00 2001 From: pikaachu09 <72344695+pikaachu09@users.noreply.github.com> Date: Thu, 13 Oct 2022 02:07:50 +0530 Subject: [PATCH 2/4] Update radix.cpp --- Sorting/Radix Sort/radix.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sorting/Radix Sort/radix.cpp b/Sorting/Radix Sort/radix.cpp index 36b69a8..5de6e50 100644 --- a/Sorting/Radix Sort/radix.cpp +++ b/Sorting/Radix Sort/radix.cpp @@ -1,5 +1,6 @@ // C++ implementation of Radix Sort - +//Radix Sort takes O(d*(n+b)) time where b is the base for representing numbers, for example, for the decimal system, b is 10. What is the value of d? If k is the maximum possible value, then d would be O(logb(k)). So overall time complexity is O((n+b) * logb(k)). +//space complexity : O(n+2^d) #include using namespace std; From 4ae36fa820ca8acbb8b1722108de77a3c13351ea Mon Sep 17 00:00:00 2001 From: pikaachu09 <72344695+pikaachu09@users.noreply.github.com> Date: Sun, 30 Oct 2022 16:07:51 +0530 Subject: [PATCH 3/4] Update radix.cpp --- Sorting/Radix Sort/radix.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Sorting/Radix Sort/radix.cpp b/Sorting/Radix Sort/radix.cpp index 5de6e50..8573df9 100644 --- a/Sorting/Radix Sort/radix.cpp +++ b/Sorting/Radix Sort/radix.cpp @@ -1,6 +1,7 @@ // C++ implementation of Radix Sort //Radix Sort takes O(d*(n+b)) time where b is the base for representing numbers, for example, for the decimal system, b is 10. What is the value of d? If k is the maximum possible value, then d would be O(logb(k)). So overall time complexity is O((n+b) * logb(k)). //space complexity : O(n+2^d) + #include using namespace std; From 5bb5d7be356d98fbdd2256e7f3207d13f9153953 Mon Sep 17 00:00:00 2001 From: pikaachu09 <72344695+pikaachu09@users.noreply.github.com> Date: Sun, 30 Oct 2022 16:09:47 +0530 Subject: [PATCH 4/4] Create inCpp.cpp --- Sorting/Radix Sort/inCpp.cpp | 77 ++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 Sorting/Radix Sort/inCpp.cpp diff --git a/Sorting/Radix Sort/inCpp.cpp b/Sorting/Radix Sort/inCpp.cpp new file mode 100644 index 0000000..0058fe7 --- /dev/null +++ b/Sorting/Radix Sort/inCpp.cpp @@ -0,0 +1,77 @@ +// C++ implementation of Radix Sort +//Radix Sort takes O(d*(n+b)) time where b is the base for representing numbers, for example, for the decimal system, b is 10. What is the value of d? If k is the maximum possible value, then d would be O(logb(k)). So overall time complexity is O((n+b) * logb(k)). +//space complexity : O(n+2^d) + +#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; +}