[C] Ordenar Array de STRUCT

Iniciado por n-utz, 24 Septiembre 2016, 00:22 AM

0 Miembros y 1 Visitante están viendo este tema.

n-utz

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.

crack81

Hola te dejo un ejemplo usando el método de ordenamiento bubleSort

Código (cpp) [Seleccionar]
#include <iostream>
#include<cstring>
using namespace std;

struct Empleado
{
    string nombre;
    string apellido;
    string DNI;
    float sueldo;
    string fechaFinContrato;
};

void bubbleSort(Empleado empleados[],int TAM){

    for(int i=1; i<TAM; i++){
        for(int j=0; j<TAM-1; j++){
            if(strcmp(empleados[j].DNI.c_str(),empleados[j+1].DNI.c_str())>0){
                swap(empleados[j],empleados[j+1]);
            }
        }
    }
}


int main()
{
    Empleado empleados[4]={{"pedro ","martinez","13AX001",1000,"15-02-2010"},
                          {"juan ","perez","12BX002",1000,"13-02-2012"},
                          {"raul ","garcia","13CC111",1000,"20-10-2013"},
                          {"rosa ","lomeli","13IZ234",1000,"01-02-2014"}};


    //Ordenamos a los empleados
    bubbleSort(empleados,4);

    //Mostramos los empleados ordenados por DNI
    for(Empleado e:empleados){
        cout<<"DNI"<<e.DNI<<" Nombre "<<e.nombre<<endl;
    }

    return 0;
}


Si tienes dudas comentalo.
Saludos... :laugh:
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

HardForo

Un código de ejemplo muy limpio @crack81   ;-)
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

n-utz

#3
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.