Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
DESARROLLO
Algoritmo de Ordenamiento externo
Datos más grandes, guardados en dispositivos de memoria externa
Mezcla Directa
Partición con tamaño fijo y Fusión de secuencias ordenadas
1. void mezclar(int arreglo1[], int n1, int arreglo2[], int n2, int arreglo3[])
2. {
3. int x1=0, x2=0, x3=0;
4.
5. while (x1<n1 && x2<n2) {
6. if (arreglo1[x1]<arreglo2[x2]) {
7. arreglo3[x3] = arreglo1[x1];
8. x1++;
9. } else {
10. arreglo3[x3] = arreglo2[x2];
11. x2++;
12. }
13. x3++;
14. }
15. while (x1<n1) {
16. arreglo3[x3] = arreglo1[x1];
17. x1++;
18. x3++;
19. }
20. while (x2<n2) {
21. arreglo3[x3] = arreglo2[x2];
22. x2++;
23. x3++;
24. }
25. }
26.
27. void mezcla(int vector[], int n)
28. {
29. int *vector1, *vector2, n1, n2,x,y;
30. if (n>1)
31. {
32. if (n%2 == 0)
33. n1=n2=(int) n / 2;
34. else
35. {
36. n1=(int) n / 2;
37. n2=n1+1;
38. }
39. vector1=(int *) malloc(sizeof(int)*n1);
40. vector2=(int *) malloc(sizeof(int)*n2);
41. for(x=0;x<n1;x++)
42. vector1[x]=vector[x];
43. for(y=0;y<n2;x++,y++)
44. vector2[y]=vector[x];
45. mezcla(vector1, n1);
46. mezcla(vector2, n2);
47. mezclar(vector1, n1, vector2, n2, vector);
48. free(vector1);
49. free(vector2);
50. }
51. }
52.
53. int main(){
54. int i, vector[] = {2,3,5,7,2,6,1,5,8,3,2};
55.
56. mezcla(vector,12);
57.
58. for(i=0;i<12;i++)
59. printf("%i,\n", vector[i]);
60.
61. return 0;
62. }
Mezcla natural
Partición con máxima longitud y Fusión de secuencias alternadas
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fichero;
rewind(fich);
fgets(linea, 128, fich);
while(!feof(fich)) {
puts(linea);
fgets(linea, 128, fich);
}
}
// Algoritmo de mezcla:
void Mezcla(FILE *fich)
{
int ordenado;
FILE *aux[2];
Algoritmo de búsqueda
Busqueda secuencial
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_SIZE_VISIBLE 100
int main(int argc, char **argv)
{
int *a;
int size, n, i, j;
printf("Entre cuantos números queremos buscar? ");
scanf("%d", &size);
a = malloc(size * sizeof(int));
srand(time(NULL));
for(i=0;i<size;i++)
{
a[i]=rand()/1000;
}
if(size<MAX_SIZE_VISIBLE)
{
for(i=0;i<size;i++)
{
printf("%d: %d\n",i,a[i]);
}
}
printf("Que numero desea buscar ");
scanf("%d", &n);
j = 0;
for(i=0;i<size;i++)
{
if( a[i]==n )
{
printf("%d se encuentra en la posición %d\n",n,i);
j = 1;
return 0;
}
}
// Si no se encontró número al finalizar el ciclo no existe este número en el arreglo.
if(!j)
{
printf("No se encontro el número\n");
}
return 0;
}
BIBLIOGRAFIA
http://c.conclase.net/ficheros/?cap=005
https://pastebin.com/x75dtUvW
http://eenube.com/index.php/ldp/c/28-busqueda-secuencial-en-c-2