C/Visual C - Algoritmoa de busqueda y ordenacion en C hashing y bucket sort en lenguaje C

   
Vista:

Algoritmoa de busqueda y ordenacion en C hashing y bucket sort en lenguaje C

Publicado por Ale (1 intervención) el 25/03/2014 07:39:49
Algoritmoa de busqueda y ordenacion en C hashing y bucket sort, ayuda urgente.
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

Algoritmoa de busqueda y ordenacion en C hashing y bucket sort en lenguaje C

Publicado por manuel isaac (5 intervenciones) el 27/06/2014 06:43:19
saludos desde venezuela ¡¡¡¡¡ mira este problema del algoritmo de ordenamiento buketSort....¡¡¡es unos de los problemas mas interesantes que he visto de arreglos¡¡¡ como sabras el algoritmo consiste en dado un vector desordenado ¡¡¡ cada numero debe ser colocado segun lo indique sus digitos x ejemplo : tenemos una cantidad de 3 numeros: n=3 ....Y LOS VALORES SON 7,2,,21 ...serian 2 pasadas x el mayor valor 21 ..tiene 2 cifras digitales ..el algoritmo debe garantizar q al terminar las pasadas (2 x ser el mayor 21 )¡¡¡ en la fila 0 de la matriz A[10][n] debe estar ordenado el vector¡¡¡ 2,7,21

puedes probarlo x ejemplo con 10 cifras n=10, ....32,27,64,18 ,95,14,90,70,60,37

el resultado deberia que en la fila 0 este ordenado 14,18,27,32,37,60,64,70,90,95


el unico problema con este codigo es q solo sirve con numeros de 1 y 2 cifras...no he resuelto para valores mayores,...x un ejemplo un caso como 97,3,100 ...3 pasadas....para ordenarlo en la fila 0 con n=3....valores...¡¡¡

sin mas ¡¡
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Algoritmoa de busqueda y ordenacion en C hashing y bucket sort en lenguaje C

Publicado por manuel isaac (5 intervenciones) el 27/06/2014 06:49:08
son archivos cubeta.c y exponencial.h

te anexo cubeta.c
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#include<stdio.h>
#include "exponencial.h"
 
#define MAX 10
 
int Arreglo[10][MAX];
 
int pasadas;
 
void cubeta(int A[],int );
int cant_pasadas(int);
int mayor(int [],int);
 
main()
{
 
	int i,j;
	int n;
	int tem1;
 
	 int grande;
	int A[MAX];
 
	printf(" cantidad de elementos\n");
 
	scanf("%d",&n);
 
	 for(j=0;j<=n-1;j++)
		scanf("%d", & A[j]);
 
 
	 for(j=0;j<=n-1;j++)
	 	tem1=A[j];
 
	grande=mayor(A,n);
	pasadas=cant_pasadas(grande);
 
 
 
	cubeta(A,n);
 
 
 
 
 
system("pause");
}
 
void cubeta(int A[],int x)
{
	int i;
	int l;
	int indice[x][pasadas];
   	int tem[x][pasadas];
	int tem1[x][pasadas];
	int tem2;
    	int j;
 
	int z;
 
	int aux;
	int aux1;
	int aux2;
 
	aux=0;
	aux1=0;
	aux2=0;
	i=0;
	z=0;
 
 
    void printArray(int Arreglo[][MAX],int);
 
 
while(i<=pasadas-1)
	{
for(j=0;j<=9;j++)
    for(l=0;l<=x-1;++l)
   {
	if(i==0){
		tem[l][i]=A[l];
 
	       indice[l][i]=tem[l][i]%10;
           //esta es la primera pasada
		//Arreglo[indice[l][i]][l]=A[l];
 
		 if(indice[l][i]==j){
 
		 tem1[l][i]=tem[l][i];
		 tem1[l][i] /= 10;
 
 
     		indice[l][i+1]=(tem1[l][i]%10);
			++aux;
 
    		Arreglo[indice[l][i+1]][aux-1]=tem[l][i];
 
			}
 
	}
	else if(i<=pasadas && Arreglo[j][l]!=0){
 
		tem[l][i]=Arreglo[j][l];
		tem1[l][i]=tem[l][i];
		tem1[l][i] /= (power(10,i+1));
 
 
 
     		indice[l][i+1]=(tem1[l][i]%(power(10,i+1)));
 
		++aux1;
			Arreglo[indice[l][i+1]][aux1-1]=tem[l][i];
    	}
 
 
 
 
 
 
}
 
++i;
//printf("%d   ",i);
}
 
printArray(Arreglo,x);
 
}
 
void printArray(int Arreglo[][MAX],int x)
{
 
int i,j;
	for(i=0;i<10;i++)
	{
		for(j=0;j<=x-1;j++)
 
			printf("%-5d",Arreglo[i][j]);
			printf("\n");
	}
 
}
 
 
int cant_pasadas(int numero)
{
     int num_tem;
     int cant_digi=1;
     int bandera;
     bandera=0;
 
	num_tem = numero;
	while (bandera == 0)
	{
		num_tem /= 10;
		printf("\n");
		cant_digi++;
		if (num_tem >= 0)
			if (num_tem <= 9)
				bandera = 1;
	}
	return cant_digi;
//	printf("Son %d digitos.\n", cant_digi);
}
 
int mayor(int A[],int x)
{
    int j;
    int mayor=0;
 
    //calcule del mayor usado luego en  funcion cantidad
 for(j=0;j<=x-1;j++){
   	   	if(mayor<A[j])
	   {
		   mayor=A[j];
	   }
}
return mayor;
//aqui termina
 
 
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Algoritmoa de busqueda y ordenacion en C hashing y bucket sort en lenguaje C

Publicado por manuel isaac (5 intervenciones) el 27/06/2014 06:50:09
exponencial.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
int power(int,int);
/*main()
{
	int x=2,y;

	printf("base\n");
	scanf("%d",&x);
	printf("exponente:entero mayor o igual a 1\n");
	scanf("%d",&y);

	printf("power(%d,%d):%d\n",x,y,power(2,y));
}*/
 
int power(int base,int exponente)
{
 
 
	if(exponente==1)
		return base;
	else
		return base*power(base,exponente-1);
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar