Código C++:
Gracias por adelantado. Ver original
#include <stdio.h> #include <stdlib.h> int buscarPos(int valor, int array[], int size_array) { int pos=0,aux_pos; do{ aux_pos=pos; if(valor > array[pos]){ pos = (pos + size_array) / 2; if(aux_pos==pos && pos > 0){ pos++; } }else{ if(pos > 0 && array[pos-1] < valor){ break; }else if(size_array > 0 && valor <= array[pos]) break; size_array = size_array - aux_pos; pos = size_array / 2; if(aux_pos==pos && pos > 0){ pos--; } } }while(pos < size_array && aux_pos != pos); return pos; } int insertarElemento(int valor, int array[], int size_array, int pos) { int i; for (i=size_array; i > pos; i--) { array[i]=array[i-1]; } array[pos]=valor; size_array++; return size_array; } int main(int argc, char* argv[]) { int a[]={50,2,2,100,5,3,1,7,9}; int b[]={4,2,6,10,8}; //int *c; int c[50]; int pos,i,j; int nElements=0,size_array1,size_array2; //Solicito la memoria necesaria para colocar la lista combinada ordenada //c= calloc((sizeof(a)+sizeof(b))/sizeof(int),sizeof(int)); size_array1=sizeof(a)/sizeof(int); size_array2=sizeof(b)/sizeof(int); for(i=0,j=0;nElements < size_array1+size_array2;){ if(i<size_array1){ //Obtengo la posicion que tomará dicho elemento en la lista en orden ascendente pos = buscarPos(a[i],c,nElements); nElements = insertarElemento(a[i],c,nElements,pos); i++; } if(j<size_array2){ pos = buscarPos(b[j],c,nElements); nElements = insertarElemento(b[j],c,nElements,pos); j++; } } for(pos=0;pos<nElements;pos++) //free(c); return 0; }