Radix sort in C
This sorting algorithm is based on the values of the digits in the positional representation of numbers to be sorted.
Numbers and decimal digits
Consider the number 235 in decimal notation It is written with 2 in the hundredth position, 3 in the tenth position and 5 in the units' position.
To find which number is greater between two such numbers, it may be done in the following way: Starting with the least significant digit, check which number has larger digit. The number with the larger most significant digit is the greater number. If all digits match, the numbers are equal.
Radix sort algorithm in C
This technique is implemented in radix sort algorithm.
The elements are populated in an array. The radix sort algorithm implements a 10 rows of queues. The queues are maintained corresponding to the elements in the decimal number system. Queue[0] is for holding numbers whose digits ends with 0. Similarly queue[1] to queue[9] are for holding digits 1 - 9.
The algorithm takes each number from the array and extracts the digit from a specific position in the number. The digit is checked and put in the corresponding queue. Queue process starts with digit 0 till 9
Now all the queues are filled. It is time to dequeue the numbers and put those back to array. Dequeue is done in the same order, starting from zero till 9. Now the array is repopulated with numbers based on the rank of the digit position.
This process is repeated starting from least significant digit to most significant digit. Once the above process completes for the the most significant digit, it completes the sorting process.
Radix sort visualization with example
Let us consider the following example: Considering the following numbers:
12 98 34 67 54 23 56 45
The algorithm creates the following two queue sets:
Queue based on least significant digit:
Radix sort digit position ones Queue [0] : Queue [1] : Queue [2] : 12, Queue [3] : 23, Queue [4] : 34, 54, Queue [5] : 45, Queue [6] : 56, Queue [7] : 67, Queue [8] : 98, Queue [9] :
After repopulating array:
12 23 34 54 45 56 67 98
Since the highest number in the array (98) has two digits, the process is repeated for the next digit, i.e. the most significant digit.
Queue based on most significant digit:
Radix sort digit position tens Queue [0] : Queue [1] : 12, Queue [2] : 23, Queue [3] : 34, Queue [4] : 45, Queue [5] : 54, 56, Queue [6] : 67, Queue [7] : Queue [8] : Queue [9] : 98,
After repopulating array:
12 23 34 45 54 56 67 98
Thus, the array is sorted.
Extract Digits
The method responsible for extraction of the digit from a particular position may be indicated by GetDigitatPosition(int number, int position) where number sent for extraction and position from which digit has to be extracted.
The algorithm for the method may be written as:
Radix sort implementation
The method implementing radix sort may be defined as radix_sort(int elements[], int count) where elements[] is the array containing the elements, count is the number of elements present in the array. This function calculates the highest number and the digits present in that number.
It performs mainly these functions in a loop:
- The numbers are provided to the GetDigitatPosition(int number, int position) method along with position for digit to be extracted
- The number is put in the queue pointed by the extracted digit
- The elements in the queues are put back into the array after all the numbers have been checked.
These steps are repeated from digits in zero th position till the highest digit in the max number present in the array.
The algorithm for the method may be written as:
Time complexities
The time requirement for the radix sorting method depends on the number of digits and the number of elements in the array (count). Since the outer loop for(i= 0;i< digits;i++) is traversed "digits" times and inner loop is traversed "count" times, the sort is approximately O(max digits*count). this sort is reasonably efficient when the number of digits in the numbers is small.
Radix sort example source
Full working code of radix sort written in C language however C++ STL queue class has been utilized for simplicity.
Radix sort example step by step output
Here is a set of numbers only having 2 digit places. Radix sort example shows 2 stages of step by step output. The numbers will be iterated twice since there are only two digits available.
Radix sort Element :12, 98, 34, 67, 54, 23, 56, 45, Radix sort position ones Queue [0] : Queue [1] : Queue [2] : 12, Queue [3] : 23, Queue [4] : 34, 54, Queue [5] : 45, Queue [6] : 56, Queue [7] : 67, Queue [8] : 98, Queue [9] : Element :12, 23, 34, 54, 45, 56, 67, 98, Radix sort position tens Queue [0] : Queue [1] : 12, Queue [2] : 23, Queue [3] : 34, Queue [4] : 45, Queue [5] : 54, 56, Queue [6] : 67, Queue [7] : Queue [8] : Queue [9] : 98, Element :12, 23, 34, 45, 54, 56, 67, 98, Radix sorted array Element :12, 23, 34, 45, 54, 56, 67, 98, Press any key to continue
Radix sort example step by step output
Here is a set of numbers having 4 digit places. Radix sort example shows 4 stages of step by step output. The numbers will be iterated 4 times since there are 4 digits available. Radix sort iterations will increased according to the maximum count of digits in the numbers.
Radix sort Element :2000, 300, 256, 12, 98, 34, 67, 54, 23, 56, 45, Radix sort position ones Queue [0] : 2000, 300, Queue [1] : Queue [2] : 12, Queue [3] : 23, Queue [4] : 34, 54, Queue [5] : 45, Queue [6] : 256, 56, Queue [7] : 67, Queue [8] : 98, Queue [9] : Element :2000, 300, 12, 23, 34, 54, 45, 256, 56, 67, 98, Radix sort position tens Queue [0] : 2000, 300, Queue [1] : 12, Queue [2] : 23, Queue [3] : 34, Queue [4] : 45, Queue [5] : 54, 256, 56, Queue [6] : 67, Queue [7] : Queue [8] : Queue [9] : 98, Element :2000, 300, 12, 23, 34, 45, 54, 256, 56, 67, 98, Radix sort position hundreds Queue [0] : 2000, 12, 23, 34, 45, 54, 56, 67, 98, Queue [1] : Queue [2] : 256, Queue [3] : 300, Queue [4] : Queue [5] : Queue [6] : Queue [7] : Queue [8] : Queue [9] : Element :2000, 12, 23, 34, 45, 54, 56, 67, 98, 256, 300, Radix sort position thousands Queue [0] : 12, 23, 34, 45, 54, 56, 67, 98, 256, 300, Queue [1] : Queue [2] : 2000, Queue [3] : Queue [4] : Queue [5] : Queue [6] : Queue [7] : Queue [8] : Queue [9] : Element :12, 23, 34, 45, 54, 56, 67, 98, 256, 300, 2000, Radix sorted array Element :12, 23, 34, 45, 54, 56, 67, 98, 256, 300, 2000, Press any key to continue
About our authors: Team EQA
You have viewed 1 page out of 252. Your C learning is 0.00% complete. Login to check your learning progress.