Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

import java.util.*; public class RadixSort { // A utility function to get maximu

ID: 3710665 • Letter: I

Question

import java.util.*;

public class RadixSort {

    // 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++) {

            int key = (arr[i] / exp) % 10;

            if(key%2 == 1) {

                System.out.println("Key containing odd digits");

                System.exit(0);

            }

            count[key]++;

        }

        // 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 curent 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]+" ");

    }

    /*Driver function to check for above function*/

    public static void main (String[] args)

    {

        int arr[] = {420, 44, 42, 60, 802, 24, 2, 66};

        int n = arr.length;

        radixsort(arr, n);

      print(arr, n);

    }

}

(b) What is the running time complexity of your radixSort method? Justify.

Explanation / Answer

If you have any doubts, please give me comment...

Radix Sort is to do digit by digit sort starting from least significant digit to most significant digit. Radix sort uses counting sort as a subroutine to sort. Sort input array using counting sort according to the i'th digit.

Let there be "d" digits in input integers. Radix Sort takes O(d*(n+b)) time where b is the base for representing numbers, for example, for 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)). Which looks more than the time complexity of comparison based sorting algorithms for a large k. Let us first limit k. Let k <= nc where c is a constant. In that case, the complexity becomes O(nLogb(n)). But it still doesn’t beat comparison based sorting algorithms.