Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: n-utz en 24 Septiembre 2016, 00:22 am



Título: [C] Ordenar Array de STRUCT
Publicado por: n-utz en 24 Septiembre 2016, 00:22 am
Buenas, ahora estoy perdido enserio.

Me pidieron que haga un array de estructuras con los campos NombreyApellido, DNI, Sueldo, FechaFinDeContrato, tengo que cargarlo desordenadamente, luego ordenarlo y pasarlo a un archivo ordenado.

Lo tengo que ordenar por el campo clave DNI, y utilizar alguno de los metodos conocidos, shell, quicksort, burbuja, etc...

No tengo idea como hacerlo, es decir se como comparar los DNIs entre si, pero despues no se como acomodar en orden la estructura o si pasarla directamente a medida que voy encontrando los primeros elementos al archivo.


Título: Re: [C] Ordenar Array de STRUCT
Publicado por: crack81 en 24 Septiembre 2016, 01:24 am
Hola te dejo un ejemplo usando el método de ordenamiento bubleSort

Código
  1. #include <iostream>
  2. #include<cstring>
  3. using namespace std;
  4.  
  5. struct Empleado
  6. {
  7.    string nombre;
  8.    string apellido;
  9.    string DNI;
  10.    float sueldo;
  11.    string fechaFinContrato;
  12. };
  13.  
  14. void bubbleSort(Empleado empleados[],int TAM){
  15.  
  16.    for(int i=1; i<TAM; i++){
  17.        for(int j=0; j<TAM-1; j++){
  18.            if(strcmp(empleados[j].DNI.c_str(),empleados[j+1].DNI.c_str())>0){
  19.                swap(empleados[j],empleados[j+1]);
  20.            }
  21.        }
  22.    }
  23. }
  24.  
  25.  
  26. int main()
  27. {
  28.    Empleado empleados[4]={{"pedro ","martinez","13AX001",1000,"15-02-2010"},
  29.                          {"juan ","perez","12BX002",1000,"13-02-2012"},
  30.                          {"raul ","garcia","13CC111",1000,"20-10-2013"},
  31.                          {"rosa ","lomeli","13IZ234",1000,"01-02-2014"}};
  32.  
  33.  
  34.    //Ordenamos a los empleados
  35.    bubbleSort(empleados,4);
  36.  
  37.    //Mostramos los empleados ordenados por DNI
  38.    for(Empleado e:empleados){
  39.        cout<<"DNI"<<e.DNI<<" Nombre "<<e.nombre<<endl;
  40.    }
  41.  
  42.    return 0;
  43. }
  44.  

Si tienes dudas comentalo.
Saludos... :laugh:


Título: Re: [C] Ordenar Array de STRUCT
Publicado por: HardForo en 24 Septiembre 2016, 01:58 am
Un código de ejemplo muy limpio @crack81   ;-)


Título: Re: [C] Ordenar Array de STRUCT
Publicado por: n-utz en 24 Septiembre 2016, 19:08 pm
Alucinante, solo una duda con respecto a mi pregunta. Swap simula ser una funcion de intercambio no? o es una funcion agregada a una libreria?. (lo que me interesaria es el contenido de que pasa adentro de swap)
Usaste un par de librerias que no son de mi conocimiento, generalmente me manejo con stdio, stdlib, string.h y bool.

Supongo que mi desentendimiento del cout<< tiene que ver con esto, igual que con el using namespace std.

Y una duda importante: en la comparacion con el strcmp, que surge? Es decir, cuando devuelve mayor que 0? Difiere si es mayor o menor a 0? Yo la manejaba solamente con igualdad a 0, para comparar strings. Usando DNI como string y no como entero, es confuso, pero me gustaria saberlo.