ProgIng - Programación en Ingeniería
Loading...
Searching...
No Matches
018_Casilleros.c
Go to the documentation of this file.
1#include <stdio.h>
2#include <stdlib.h>
3#include <time.h>
4#include <math.h>
5
6#define N 1000000
7#define M 1000
8
9int main(int argc, char *argv[])
10{
11 long int n, m, i, j, k, car[M], ind[M], ind2;
12 float X[N], max, min, aux, rg[M], rng_int, Y[N];
13 srand(time(NULL));
14 do{
15 printf("Ingrese el numero de elementos: ");
16 scanf("%ld", &n);
17 }while(n<2||n>N);
18 printf("Ingrese le valor maximo: ");
19 scanf("%f", &max);
20 printf("Ingrese el valor minimo: ");
21 scanf("%f", &min);
22 if(max<min)
23 {
24 max*=min;
25 min=max/min;
26 max/=min;
27 }
28 printf("[%f, %f]\n", min, max);
29 printf("Desordenados.\n");
30 for(i=0; i<n; i++)
31 {
32 X[i] = ((max-min)*rand())/RAND_MAX+min;
33 printf("X[%ld] = %f\n", i+1, X[i]);
34 }
35 m = sqrt(n);
36 printf("Casilleros: %ld\n", m);
37 rng_int = ceil((max-min)/m);
38 rg[0] = min;
39 car[0] = 0;
40 for(i=1; i<m+1; i++)
41 {
42 rg[i] = rg[i-1]+rng_int;
43 car[i] = 0;
44 }
45 for(i=0; i<n; i++)
46 car[(int)((X[i]-min)/rng_int)]++;
47 ind[0]=0;
48 for(i=1; i<m; i++)
49 ind[i]=ind[i-1]+car[i-1];
50 for(i=0; i<m; i++)
51 printf("#[%f, %f) = %ld\t%ld\n", rg[i], rg[i+1], car[i], ind[i]);
52 for(i=0; i<n; i++)
53 {
54 ind2 = (int)((X[i]-min)/rng_int);
55 Y[ind[ind2]] = X[i];
56 ind[ind2]++;
57 }
58 printf("Buket.\n");
59 for(i=0; i<n; i++)
60 printf("Y[%ld] = %f\n", i+1, Y[i]);
61 for(k=0, ind2 = 0; k<m; k++)
62 {
63 for(i=ind2; i<(ind2+car[k]-1) ; i++)
64 for(j=i+1; j<(ind2+car[k]); j++)
65 if(Y[i]>Y[j])
66 {
67 Y[i]*=Y[j];
68 Y[j]=Y[i]/Y[j];
69 Y[i]/=Y[j];
70 }
71 ind2 += car[k];
72 }
73
74
75 printf("Ordenados.\n");
76 for(i=0; i<n; i++)
77 printf("Y[%ld] = %f\n", i+1, Y[i]);
78 return 0;
79}
#define N
#define max
#define min
#define M
int main(void)
Definition Ejemplo_035.c:15