Pagini recente » Cod sursa (job #1138949) | Cod sursa (job #1272085) | Cod sursa (job #1345845) | Cod sursa (job #372440) | Cod sursa (job #1459946)
#include <fstream>
using namespace std;
void CountingSort(int *a, int n, int exp){
int *c = new int[10];
int *b = new int[n];
for (int i = 0; i < 10; i++)
c[i] = 0;
for (int i = 0; i < n; i++)
c[(a[i] / exp) % 10]++;
for (int i = 1; i < 10; i++)
c[i] += c[i - 1];
for (int i = n - 1; i >= 0; i--){
b[c[(a[i] / exp) % 10] - 1] = a[i];
c[(a[i] / exp) % 10]--;
}
for (int i = 0; i < n; i++)
a[i] = b[i];
delete[] b;
delete[] c;
}
void RadixSort(int *a, int n, int max_n){
for (int exp = 1; max_n / exp > 0; exp *= 10)
CountingSort(a, n, exp);
}
int main(){
ifstream in("algsort.in");
ofstream out("algsort.out");
int n, max_number = 0;
in >> n;
int *a = new int[n];
for (int i = 0; i < n; i++){
in >> a[i];
if (max_number < a[i])
max_number = a[i];
}
RadixSort(a, n, max_number);
for (int i = 0; i < n; i ++)
out << a[i] << " ";
delete[] a;
return 0;
}