Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Examen de tesinas para FuDePAN */
- /** Funciones Auxiliares */
- /* Assignandcheck coloca el valor de array[arrindex] en res[place], aumenta arrindex en 1, y verifica si se ha llegado
- * al final de array; devuelve 1 si se llego al final de array, 0 en caso contrario */
- unsigned int assignandcheck (unsigned int * arrindex, const int place, const unsigned int size, const int array[], int * res) {
- unsigned int result;
- res[place] = array[*arrindex];
- *arrindex = *arrindex+1;
- if (*arrindex == size) {
- result = 1;
- } else {
- result = 0;
- }
- return result;
- }
- /* Arraychunkcopy toma copyamount elementos desde la posicion arrindex de array,
- y los va colocando en res a partir de la posicion resindex */
- void arraychunkcopy (const unsigned int arrindex, const unsigned int copyamount, const unsigned int resindex, const int array [], int * res) {
- unsigned int i;
- for (i=0; i<copyamount; i++) {
- res[resindex+i] = array[arrindex+i];
- }
- }
- /** La funcion requerida en el enunciado */
- unsigned int merge(const int array1[], unsigned int size1, const int array2[], unsigned int size2, int result[])
- {
- unsigned int fstindex[1];
- unsigned int sndindex[1]; /* Indices para recorrer el primero y segundo arreglos, respectivamente */
- unsigned int i;
- unsigned int reached_end; /* Flag para indicar si se llego al final de alguno de los arreglos */
- const unsigned int size_result = size1 + size2;
- *fstindex = 0;
- *sndindex = 0;
- reached_end = 0;
- i = 0;
- while (i<size_result && !reached_end ) {
- /* Si no se llego al final de ninguno de los arreglos, comparamos el primer elemento de cada arreglo */
- if (array1[*fstindex] <= array2[*sndindex]) {
- reached_end = assignandcheck (fstindex, i, size1, array1, result);
- } else {
- reached_end = assignandcheck (sndindex, i, size2, array2, result);
- }
- i++;
- }
- /* Puede faltar copiar size - index elementos de un arreglo */
- arraychunkcopy (*fstindex, size1 - *fstindex, i, array1, result);
- arraychunkcopy (*sndindex, size2 - *sndindex, i, array2, result);
- return size_result;
- }
Add Comment
Please, Sign In to add comment