-->

Friday, 31 March 2017

radix sort


C Program to Implement Radix Sort


Radix Sort

By Eric Suh
Radix Sort is a clever and intuitive little sorting algorithm. Radix Sort puts the elements in order by comparing the digits of the numbers. I will explain with an example.
Consider the following 9 numbers:
493   812   715   710   195   437   582   340   385
We should start sorting by comparing and ordering the one's digits:
DigitSublist
0  340 710
1 
2  812 582
3  493
4 
5  715 195 385
6 
7  437
8 
9 
Notice that the numbers were added onto the list in the order that they were found, which is why the numbers appear to be unsorted in each of the sublists above. Now, we gather the sublists (in order from the 0 sublist to the 9 sublist) into the main list again:
340   710   812   582   493   715   195   385   437
Note: The order in which we divide and reassemble the list is extremely important, as this is one of the foundations of this algorithm.
Now, the sublists are created again, this time based on the ten's digit:
DigitSublist
0 
1  710 812 715
2 
3  437
4  340
5 
6 
7 
8  582 385
9  493 195
Now the sublists are gathered in order from 0 to 9:
710   812   715   437   340   582   385   493   195
Finally, the sublists are created according to the hundred's digit:
DigitSublist
0 
1  195
2 
3  340 385
4  437 493
5  582
6 
7  710 715
8  812
9 
At last, the list is gathered up again:
195   340   385   437   493   582   710   715   812
And now we have a fully sorted array! Radix Sort is very simple, and a computer can do it fast. When it is programmed properly, Radix Sort is in fact one of the fastest sorting algorithms for numbers or strings of letters.
Here is source code of the C Program to Implement Radix Sort. The C program is successfully compiled and run on a Linux system. The program output is also shown below.
  1. #include<stdio.h>
  2.  
    int getMax(int arr[], int n) {
        int mx = arr[0];
        int i;
        for (i = 1; i < n; i++)
            if (arr[i] > mx)
                mx = arr[i];
        return mx;
    }
     
    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]++;
     
        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]--;
        }
     
        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) {
        int m = getMax(arr, n);
     
        int exp;
        for (exp = 1; m / exp > 0; exp *= 10)
            countSort(arr, n, exp);
    }
     
    void print(int arr[], int n) {
        int i;
        for (i = 0; i < n; i++)
            printf("%d ", arr[i]);
    }
     
    int main() {
        int arr[100],n,i;
            n=5;
        for(i=0;i<n;i++)
        {
         scanf("%d",&arr[i]);
     }
        radixsort(arr, n);
        print(arr, n);
        return 0;
    }
Output:
$ gcc RadixSort.c
$ ./a.out
 
2 24 45 66 75 90 170 802

keep calm and say bujuku bujuku.

0 comments:

Post a Comment

Start Work With Me

Contact Us
KUTTY SELVA
+91 7708139984
Madurai,Tamilnadu