In: Computer Science
This is a radix sort algorithm.
please add the date type and the instruction given inside the code to make it completely work.
please do not change the code just follow the instruction.
#include <iostream>
using namespace std;
// Returns the length, in number of digits, of value
int RadixGetLength(int value) {
if (value == 0)
return 1;
int digits = 0;
while (value != 0) {
digits = digits + 1;
value = value / 10;
}
return digits;
}
// Returns the maximum length, in number of digits, out of all elements in the array
int RadixGetMaxLength(int arr[], int arraySize) {
int maxDigits = 0;
for (int i = 0; i < arraySize; i++) {
int digitCount = RadixGetLength(arr[i]);
if (digitCount > maxDigits)
maxDigits = digitCount;
}
return maxDigits;
}
RadixSort(array, arraySize) {
buckets = create array of 10 buckets
// Find the max length, in number of digits
maxDigits = RadixGetMaxLength(array, arraySize)
// Start with the least significant digit
pow10 = 1
for (digitIndex = 0; digitIndex < maxDigits; digitIndex++) {
for (i = 0; i < arraySize; i++) {
bucketIndex = abs(array[i] / pow10) % 10
Append array[i] to buckets[bucketIndex]
}
arrayIndex = 0
for (i = 0; i < 10; i++) {
for (j = 0; j < buckets[i].size(); j++)
array[arrayIndex++] = buckets[i][j]
}
pow10 = 10 * pow10
Clear all buckets
}
}
int main() {
}
// C++ implementation of Radix Sort
#include <iostream>
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;
}
note: plzzz don't give dislike.....plzzz comment
if you have any problem i will try to solve your problem.....plzzz
give thumbs up i am in need....