
implementación de radix sort con fila
Publicado por Sergio Edgardo (3 intervenciones) el 16/07/2013 17:11:21
Hola colegas me podrían dar una mano con este código, el problema es que cuando implemento radix sort con arreglo anda perfectamente pero cuando lo hago con fila no pasa nada, les dejo el código, desde ya gracias por su ayuda. saludos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "fila.h"
#define MAX 20
void radixsort(int*a, int n);
void radix_sort(int*a, int n);
int main()
{
//INICIALIZACION
int i,cont=0;
item arre[MAX]={324,123,435,543,786,936,9,8,7,6,5,4,3,2,1,9999};
//MUESTRA EL ARREGLO INICIAL
printf("Arreglo Inicial\n\n");
for(i=0;arre[i];i++){printf(" %d",arre[i]);cont++;}
printf("\n\n");
//radixsort(arre,cont);
radix_sort(arre,cont);
//MUESTRA EL ARREGLO ORDENADO
printf("Arreglo Ordenado\n\n");
//for(i=0;arre[i];i++)printf(" %d",arre[i]);
printf("\n\n");
return 0;
}
//CON ARREGLO
void radixsort(int*a, int n)
{
int i,b[MAX],m=0,exp=1;
for(i=0;i<n;i++)
{
if(a[i]>m)m=a[i];
}
while(m/exp>0)
{ int cubo[10]={0};
for(i=0;i<n;i++) cubo[a[i]/exp%10]++;
for(i=1;i<10;i++)cubo[i]+=cubo[i-1];
for(i=n-1;i>=0;i--)b[--cubo[a[i]/exp%10]]=a[i];
for(i=0;i<n;i++)a[i]=b[i];
exp*=10;
}
}
//CON FILA
void radix_sort(int*a, int n)
{
int h,i,j,m=0,exp=1,aux,aux2;
FILA cub[10],b[MAX];
for(j=0;j<10;j++){
filavacia(&cub[j]);
enfila(&cub[j],0);
}
for(h=0;h<MAX;h++)
{
filavacia(&b[h]);
enfila(&b[h],0);
}
for(i=0;i<n;i++)
{
if(a[i]>m)m=a[i];
}
while(m/exp>0)
{
for(i=0;i<n;i++){
aux=a[i]/exp;
aux=aux%10;
aux2=frente(&cub[aux]);
enfila( &cub[aux],aux2+1);
}
for(i=1;i<10;i++)enfila(&cub[i],frente(&cub[i-1])+frente(&cub[i]));
for(i=n-1;i>=0;i--)enfila(&b[frente(&cub[a[i]/exp%10])-1],a[i]);
for(i=0;i<n;i++)a[i]=defila(&b[i]);
exp*=10;
}
}
Valora esta pregunta


0