55 lines
1.3 KiB
C++
55 lines
1.3 KiB
C++
|
//Author: Tawfik Yasser
|
||
|
#include <iostream>
|
||
|
#include<algorithm>
|
||
|
using namespace std;
|
||
|
int getMax(int array[], int n) {
|
||
|
int max = array[0];
|
||
|
for (int i = 1; i < n; i++)
|
||
|
if (array[i] > max)
|
||
|
max = array[i];
|
||
|
return max;
|
||
|
}
|
||
|
void countingSort(int array[], int size, int place) {
|
||
|
const int max = 10;
|
||
|
int output[size];
|
||
|
int count[max];
|
||
|
|
||
|
for (int i = 0; i < max; ++i)
|
||
|
count[i] = 0;
|
||
|
|
||
|
for (int i = 0; i < size; i++)
|
||
|
count[(array[i] / place) % 10]++;
|
||
|
|
||
|
for (int i = 1; i < max; i++)
|
||
|
count[i] += count[i - 1];
|
||
|
|
||
|
for (int i = size - 1; i >= 0; i--) {
|
||
|
output[count[(array[i] / place) % 10] - 1] = array[i];
|
||
|
count[(array[i] / place) % 10]--;
|
||
|
}
|
||
|
|
||
|
for (int i = 0; i < size; i++)
|
||
|
array[i] = output[i];
|
||
|
}
|
||
|
|
||
|
void radixSort(int array[], int size) {
|
||
|
int max = getMax(array, size);
|
||
|
for (int place = 1; max / place > 0; place *= 10)
|
||
|
countingSort(array, size, place);
|
||
|
}
|
||
|
|
||
|
//Print the sorted array
|
||
|
void printSortedArray(int arr[],int n){
|
||
|
for(int i=0;i<n;i++){
|
||
|
cout<<arr[i]<<endl;
|
||
|
}
|
||
|
}
|
||
|
int main()
|
||
|
{
|
||
|
int arr[] = {432,8,530,90,88,231,11,45,677,199}; // Unsorted Array
|
||
|
int arr_size = sizeof(arr) / sizeof(arr[0]); // Getting array size
|
||
|
radixSort(arr,arr_size); // Send the array to radixSort
|
||
|
printSortedArray(arr,arr_size); // Print the sorted array
|
||
|
return 0;
|
||
|
}
|