Cod sursa(job #3327496)

Utilizator Andrei_PanaAndrei Pana Andrei_Pana Data 4 decembrie 2025 10:41:34
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#include <algorithm>
#include <cstring>
using namespace std;

ifstream cin("radixsort.in");
ofstream cout("radixsort.out");

#define MAXN 500000
#define BASE 32
#define NRBITS 5

int v[MAXN],output[MAXN];
int frecv[BASE];

void radixSort(int arr[],int n){
  if(n==0){
    return;
  }

  int maxval = arr[0];
  for(int i=1;i<n;i++){
    if(arr[i]>maxval){
      maxval=arr[i];
    }
  }

  for(int exp=0;(maxval>>exp)>0;exp+=NRBITS){
    memset(frecv,0,sizeof(frecv));

    for(int i=0;i<n;i++){
      frecv[(arr[i]>>exp)&(BASE-1)]++;
    }

    for(int i=1;i<BASE;i++) {
      frecv[i]+=frecv[i-1];
    }

    for(int i=n-1;i>=0;i--){
      output[--frecv[(arr[i]>>exp)&(BASE-1)]]=arr[i];
    }

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

int main(){
  int n;
  cin>>n;

  for(int i=0;i<n;i++){
    cin>>v[i];
  }

  radixSort(v,n);

  for(int i=0;i<n;i++) {
    cout<<v[i]<<" ";
  }
  cout<<"\n";

  return 0;
}