Cod sursa(job #1121940)

Utilizator promix2012petruta andrei promix2012 Data 25 februarie 2014 14:55:42
Problema Sortare prin comparare Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.96 kb
#include<stdio.h>
#define MAX 100000
#define SHOWPASS
#define BASE 10
  FILE *f,*g;
  int a[MAX],b[MAX],bucket[MAX];
void print(int n)
{
  int i;
  for (i = 0; i < n; i++){
    fprintf(g,"%d ", a[i]);
  }
}

void radixsort(int n)
{
  int i,  m = a[0], exp = 1;
  for (i = 1; i < n; i++)
  {
    if (a[i] > m)
      m = a[i];
  }

  while (m / exp > 0)
  {
    int bucket[BASE] ={  0 };
    for (i = 0; i < n; i++)
      bucket[(a[i] / exp) % BASE]++;
    for (i = 1; i < BASE; i++)
      bucket[i] += bucket[i - 1];

    for (i = n - 1; i >= 0; i--)
      b[--bucket[(a[i] / exp) % BASE]] = a[i];

    for (i = 0; i < n; i++)
      a[i] = b[i];
    exp *= BASE;
  }
}

int main()
{
  int i, n;
f=fopen("algsort.in","r+");
g=fopen("algsort.out","w+");
  fscanf(f,"%d", &n);
  n = n < MAX ? n : MAX;
  for (i = 0; i < n; i++)
    fscanf(f,"%d", &a[i]);

  radixsort(n);
  print( n);
  fclose(f);
  fclose(g);
   return 0;
}