C/Visual C - implementación de radix sort con fila

   
Vista:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder