Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Mi codigo de ordenacion por insercion no funciona bien

Estas en el tema de Mi codigo de ordenacion por insercion no funciona bien en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 30/11/2016, 15:45
 
Fecha de Ingreso: febrero-2015
Mensajes: 404
Antigüedad: 9 años, 2 meses
Puntos: 3
Mi codigo de ordenacion por insercion no funciona bien

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 C++:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int buscarPos(int valor, int array[], int size_array)
  5. {
  6.     int pos=0,aux_pos;
  7.  
  8.     do{
  9.         aux_pos=pos;
  10.         if(valor > array[pos]){
  11.             pos = (pos + size_array) / 2;
  12.             if(aux_pos==pos && pos > 0){
  13.                 pos++;
  14.             }
  15.         }else{
  16.             if(pos > 0 && array[pos-1] < valor){
  17.                 break;
  18.             }else if(size_array > 0 && valor <= array[pos])
  19.                 break;
  20.             size_array = size_array - aux_pos;
  21.             pos = size_array / 2;
  22.             if(aux_pos==pos && pos > 0){
  23.                 pos--;
  24.             }
  25.         }
  26.     }while(pos < size_array && aux_pos != pos);
  27.     return pos;
  28. }
  29.  
  30. int insertarElemento(int valor, int array[], int size_array, int pos)
  31. {
  32.     int i;
  33.  
  34.     for (i=size_array; i > pos; i--) {
  35.         array[i]=array[i-1];
  36.     }
  37.     array[pos]=valor;
  38.  
  39.     size_array++;
  40.     return size_array;
  41. }
  42.  
  43. int main(int argc, char* argv[])
  44. {
  45.     int a[]={50,2,2,100,5,3,1,7,9};
  46.     int b[]={4,2,6,10,8};
  47.     //int *c;
  48.     int c[50];
  49.     int pos,i,j;
  50.     int nElements=0,size_array1,size_array2;
  51.  
  52.     //Solicito la memoria necesaria para colocar la lista combinada ordenada
  53.     //c= calloc((sizeof(a)+sizeof(b))/sizeof(int),sizeof(int));
  54.     size_array1=sizeof(a)/sizeof(int);
  55.     size_array2=sizeof(b)/sizeof(int);
  56.  
  57.     for(i=0,j=0;nElements < size_array1+size_array2;){
  58.         if(i<size_array1){
  59.             //Obtengo la posicion que tomará dicho elemento en la lista en orden ascendente
  60.             pos = buscarPos(a[i],c,nElements);
  61.             nElements = insertarElemento(a[i],c,nElements,pos);
  62.             i++;
  63.         }
  64.         if(j<size_array2){
  65.             pos = buscarPos(b[j],c,nElements);
  66.             nElements = insertarElemento(b[j],c,nElements,pos);
  67.             j++;
  68.         }
  69.     }
  70.  
  71.     for(pos=0;pos<nElements;pos++)
  72.         printf("%i\n",c[pos]);
  73.     //free(c);
  74.     getchar();
  75.     return 0;
  76. }
Gracias por adelantado.

Etiquetas: int, ordenacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:28.