Skip to content

Radix Sort implementation #194

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions Programs/Radix/RadixSort.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
// Radix sort Java implementation

import java.io.*;
import java.util.*;

class Radix {

// 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(arr[i] + " ");
}

// Main driver method
public static void main(String[] args)
{
int arr[] = { 170, 45, 75, 90, 802, 24, 2, 66 };
int n = arr.length;

// Function Call
radixsort(arr, n);
print(arr, n);
}
}
59 changes: 59 additions & 0 deletions Programs/Radix/RadixSortTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;

class RadixSortTest {

@Test
void testRadixSortWithPositiveNumbers() {
int[] input = {170, 45, 75, 90, 802, 24, 2, 66};
int[] expected = {2, 24, 45, 66, 75, 90, 170, 802};

Radix.radixsort(input, input.length);
assertArrayEquals(expected, input, "The sorted array does not match the expected output");
}

@Test
void testRadixSortWithAllEqualNumbers() {
int[] input = {5, 5, 5, 5, 5};
int[] expected = {5, 5, 5, 5, 5};

Radix.radixsort(input, input.length);
assertArrayEquals(expected, input, "The sorted array does not match the expected output");
}

@Test
void testRadixSortWithSingleElement() {
int[] input = {42};
int[] expected = {42};

Radix.radixsort(input, input.length);
assertArrayEquals(expected, input, "The sorted array does not match the expected output");
}

@Test
void testRadixSortWithAlreadySortedArray() {
int[] input = {1, 2, 3, 4, 5};
int[] expected = {1, 2, 3, 4, 5};

Radix.radixsort(input, input.length);
assertArrayEquals(expected, input, "The sorted array does not match the expected output");
}

@Test
void testRadixSortWithDescendingArray() {
int[] input = {9, 8, 7, 6, 5, 4, 3, 2, 1};
int[] expected = {1, 2, 3, 4, 5, 6, 7, 8, 9};

Radix.radixsort(input, input.length);
assertArrayEquals(expected, input, "The sorted array does not match the expected output");
}

@Test
void testRadixSortWithEmptyArray() {
int[] input = {};
int[] expected = {};

Radix.radixsort(input, input.length);
assertArrayEquals(expected, input, "The sorted array does not match the expected output");
}
}
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ It is very easy to contribute, you may follow these steps -
99.[RotateLinkedList](https://github.com/PrajaktaSathe/Java/blob/main/Programs/RotateLinkedList.java)-Program to demo rotating a linked list
100. [ReverseString](https://github.com/PrajaktaSathe/Java/blob/main/ReverseString.java) -Program to reverse a String using the java method substring.
101.[Overriding](https://github.com/PrajaktaSathe/Java/blob/main/Programs/Overriding.java)-Program to demo overriding in java
102. [Radix Sort](https://github.com/PrajaktaSathe/Java/blob/main/Programs/Radix/RadixSort.java)-Program to demo Radix Sort in java


# Contributors -
## A big thank you to all our contributors!!!
Expand Down