In: Computer Science
Hello i need someone to implement for me RADIX SORT IN JAVA for Characters NOT numbers
and i need the code super fast please
I am providing the code and sample output below, the code takes input as number of characters and the characters itself, you can implement static array of characters as well, you just have to uncomment some lines specified in the code to use that.
Code:
// Radix sort Java implementation
import java.io.*;
import java.util.*;
public class Main {
// A utility function to get maximum value in arr[]
static 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.
static void countSort(int arr[], int n, int exp)
{
int output[] = new int[n]; // output array
int i;
int count[] = new int[10];
Arrays.fill(count,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
static 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
static void print(int arr[], int n)
{
for (int i=0; i<n; i++)
System.out.print((char)arr[i]+" ");
}
/*Driver function to check for above function*/
public static void main (String[] args)
{
Scanner sc = new Scanner(System.in); // Create a Scanner object
//
// Static character array
//
// char arr[] = {'a', 'c', 'f', 'b', 'e'};
// int n = arr.length;
// For taking static array of characters uncomment the above lines
// And comment the below lines
System.out.println("Enter number of characters to be sorted: ");
int n = sc.nextInt();
char arr[] = new char[n];
System.out.println("Enter characters to be sorted: ");
for(int i=0; i<n; i++){
arr[i] = sc.next().charAt(0);
}
// Creating and saving the ascii values of characters in temp array
int temp[] = new int[n];
for (int i=0; i<n; i++){
temp[i] = (int)arr[i];
}
radixsort(temp, n);
System.out.println("Sorted characters are: ");
print(temp, n);
}
}
Output:
Hope this answers your questions, please leave a upvote if you find this helpful.