Pagini recente » Cod sursa (job #2494813) | Cod sursa (job #2192475) | Cod sursa (job #2089745) | Cod sursa (job #3291573) | Cod sursa (job #3265474)
#include <iostream>
#include <fstream>
void countingSort (int arr[], int n, int exp){
int output[n];
int i, count[10] = { 0 };
for (i = 0; i < n; i++)
count[(arr[i] / exp) % 10]++;
for (i = 1; i < 10; i++)
count[i] += count[i - 1];
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];
}
void radixSort(int arr[], int n){
int max = arr[0];
for (int i = 0; i < n; i++){
if(arr[i] > max){
max = arr[i];
}
}
for (unsigned long long i = 1; max / i > 0; i *= 10)
countingSort(arr, n, i);
}
int main(){
std::ifstream input ("radixsort.in");
std::ofstream output ("radixsort.out");
int a,b,c, n;
input >> n >> a >> b >>c;
int arr[n];
arr[0] = b;
for(int i = 1; i < n; i ++){
arr[i] = (a * arr[i-1] + b) % c;
}
radixSort(arr, n);
for(int i = 0; i < n; i +=10){
output << arr[i]<< ' ';
}
output << '\n';
return 0;
}