Cod sursa(job #2439007)

Utilizator red_devil99Mancunian Red red_devil99 Data 14 iulie 2019 15:53:34
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
using namespace std;

int max(int vec[], int n){
	int max = vec[0];
	for(int i = 1; i < n; i++){
		if(vec[i] > max){
			max = vec[i];
		}
	}
	return max;
}

void countSort(int vec[], int n, int exp){
	int count[10] = {0};
	int output[n];
	for(int i = 0; i < n; i++){
		count[(vec[i]/exp)%10]++;
	}
	for(int i = 1; i < 10; i++){
		count[i] += count[i-1];
	}

	for(int i = n - 1; i >= 0; i--){
		output[count[(vec[i]/exp)%10]-1] = vec[i];
		count[(vec[i]/exp)%10]--;
	}

	for(int i = 0; i < n; i++){
		vec[i] = output[i];
	}
}

void radix(int vec[], int n){
	int maxim = max(vec, n);
	for(int exp = 1; maxim/exp > 0; exp *= 10){
		countSort(vec, n, exp);
	}
}

int main(){
	ifstream fin("algsort.in");
	
	ofstream fout("algsort.out");
	
    int n, vec[500000];
	
	fin >> n;
	
	for(int i = 0; i < n; i++){
	
		fin >> vec[i];
	
	}
	radix(vec, n);

	for(int i = 0; i < n; i++){
	
		fout << vec[i] <<" ";
	
	}

	return 0;
}