ProgIng - Programación en Ingeniería
Loading...
Searching...
No Matches
Ejemplo017.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
Include dependency graph for Ejemplo017.c:

Go to the source code of this file.

Macros

#define N   10000

Functions

int main (int argc, char *argv[])

Macro Definition Documentation

◆ N

#define N   10000

Definition at line 5 of file Ejemplo017.c.

Function Documentation

◆ main()

int main ( int argc,
char * argv[] )

Definition at line 7 of file Ejemplo017.c.

8{
9 int i, j, k, l, n, nc, cs[N], id[N], ncs;
10 float max, min, x[N], xs[N], aux, rng_c;
11 srand(time(NULL));
12 do{
13 printf("Ingrese el numero de elementos: ");
14 scanf("%d", &n);
15 }while(n<1||n>N);
16 printf("Ingrese el valor maximo: ");
17 scanf("%f", &max);
18 printf("Ingrese el valor minimo: ");
19 scanf("%f", &min);
20 if(min>max)
21 {
22 if(max)
23 {
24 if(min)
25 {
26 min*=max;
27 max=min/max;
28 min/=max;
29 }
30 else
31 {
32 min = max;
33 max = 0;
34 }
35 }
36 else
37 {
38 max = min;
39 min = 0;
40 }
41 }
42 printf("Desordenado.\n");
43 for(i=0; i<n; i++)
44 {
45 x[i] = ((max-min)*rand())/RAND_MAX+min;
46 cs[i] = 0;
47 printf("X[%d] = %f\n", i+1, x[i]);
48 }
49 // Algoritmo de Bucket
50 nc = 0;
51 aux = n;
52 while(aux>(2*nc+1))
53 {
54 aux -= (2*nc+1);
55 nc++;
56 }
57 rng_c = (max-min)/nc;
58 for(i=0; i<n; i++)
59 cs[(int)((x[i]-min)/rng_c)]++;
60 for(i=1, id[0]=0; i<n; i++)
61 id[i] = id[i-1]+cs[i-1];
62 for(i=0; i<n; i++)
63 {
64 ncs = (int)((x[i]-min)/rng_c);
65 xs[id[ncs]] = x[i];
66 id[ncs]++;
67 }
68 printf("%d\t%f\n", nc, rng_c);
69 for(i=0; i<nc; i++)
70 printf("CS[%d] = %d\n", i, cs[i]);
71 for(i=0; i<nc; i++)
72 printf("%f\t", min+rng_c*(i+1));
73 printf("Pseudo-ordenado.\n");
74 for(i=0; i<n; i++)
75 printf("X[%d] = %f\t%d\t%f\n", i+1, x[i], (int)((x[i]-min)/rng_c), xs[i]);
76 for(i=1, id[0]=0; i<n; i++)
77 id[i] = id[i-1]+cs[i-1];
78 for(l=0; l<nc; l++)
79 {
80 // Algoritmo de Seleccion
81 for(i=id[l]; i<(id[l]+cs[l])-1; i++)
82 {
83 for(j=i+1, k=i; j<(id[l]+cs[l]); j++)
84 if(xs[k]>xs[j])
85 k = j;
86 if(k!=i)
87 {
88 aux = xs[i];
89 xs[i] = xs[k];
90 xs[k] = aux;
91 }
92 }
93 }
94 printf("Ordenado.\n");
95 for(i=0; i<n; i++)
96 printf("X[%d] = %f\n", i+1, xs[i]);
97 return 0;
98}
#define N
#define max
#define min