Hola amigos, estoy intentando crearme un pequeño codigo el cual coja dos arrays con enteros y los vaya insertando ordenados en un tercer array de forma ya ordenada sin tener que usar ningun otro metodo de ordenacion en ninguno de los 3 arrays. El caso es que no doy con la tecla y hace cosas raras. Os pongo mi codigo a ver si pueden echarme una mano:
Código PHP:
#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++)
printf("%i\n",c[pos]);
//free(c);
getchar();
return 0;
}
Gracias por adelantado.