Cómo fusionar dos arreglos ordenados

  1. / *
  2. * Programa C para fusionar los elementos de 2 matriz ordenada
  3. * /
  4. #include
  5. vacío principal()
  6. {
  7. int matriz1 [50], matriz2 [50], matriz3 [100], m, n, i, j, k = 0;
  8. printf (“\ n Ingrese el tamaño de la matriz Array 1:”);
  9. scanf (“% d”, & m);
  10. printf (“\ n Ingrese elementos ordenados de la matriz 1: \ n”);
  11. para (i = 0; i <m; i ++)
  12. {
  13. scanf (“% d”, & array1 [i]);
  14. }
  15. printf (“\ n Ingrese el tamaño de la matriz 2:”);
  16. scanf (“% d”, & n);
  17. printf (“\ n Ingrese elementos ordenados de la matriz 2: \ n”);
  18. para (i = 0; i <n; i ++)
  19. {
  20. scanf (“% d”, & array2 [i]);
  21. }
  22. i = 0;
  23. j = 0;
  24. mientras que (i <m && j <n)
  25. {
  26. if (matriz1 [i] <matriz2 [j])
  27. {
  28. matriz3 [k] = matriz1 [i];
  29. i ++;
  30. }
  31. más
  32. {
  33. matriz3 [k] = matriz2 [j];
  34. j ++;
  35. }
  36. k ++;
  37. }
  38. si (i> = m)
  39. {
  40. mientras que (j <n)
  41. {
  42. matriz3 [k] = matriz2 [j];
  43. j ++;
  44. k ++;
  45. }
  46. }
  47. si (j> = n)
  48. {
  49. mientras (i <m)
  50. {
  51. matriz3 [k] = matriz1 [i];
  52. i ++;
  53. k ++;
  54. }
  55. }
  56. printf (“\ n Después de combinar: \ n”);
  57. para (i = 0; i <m + n; i ++)
  58. {
  59. printf (“\ n% d”, matriz3 [i]);
  60. }
  61. }

Lets say you have two sorted arrays - arr1 and arr2

final result will be stored in array arr. (arr is sufficiently big to store elements of arr1 and arr2)

Aquí hay un pseudocódigo simple que se puede codificar en cualquier idioma:

/ *
* i: índice para arr1
* j: índice para arr2
* k: índice para arr
* n1: tamaño de arr1
* n2: tamaño de arr2
* n: tamaño de arr (n> = n1 + n2)
* /

i = j = k = 0 // inicio del índice

/ * Mientras bucle para escanear cada conjunto y almacenar elementos en un orden no ascendente * /
while (hay algún elemento en arr1 y arr2 ambos)
{
/ * mientras que los elementos de arr1 son menores que los elementos de arr2, almacenar
elementos de arr1 en arr * /
while (arr1 [i] <= arr2 [j] AND i arr [k] = arr [i]
k = k + 1
i = i + 1
}

if (i> = n1) {// índice de matriz está basado en 0
rotura; // romper desde el bucle while
}

/ * mientras que los elementos de arr2 son menores que los elementos de arr2, almacenar
elementos de arr1 en arr * /
while (arr2 [i] <= arr1 [j] {
arr [k] = arr [j]
k = k + 1
j = i + 1
}

if (j> = n2) {// índice de matriz está basado en 0
rotura; // romper desde el bucle while
}
}

/ * copiar elementos que quedan en arr1 y arr2 en arr arr * /
mientras que (i arr [k] = arr [i]
k = k + 1
i = i + 1
}

mientras que (i arr [k] = arr [j]
k = k + 1
j = i + 1
}

Encuentre su programa para fusionar dos conjuntos ordenados en C [correo electrónico protegido] http://www.progspace.com

Por favor verifique el algoritmo Merge Sort.