Dev - C++ - Ordenamiento de estructura

 
Vista:

Ordenamiento de estructura

Publicado por Andres (2 intervenciones) el 13/03/2019 23:37:06
Hola, quisiera saber si alguien me podria explicar como aplicar el metodo de ordenamiento de quicksort aplicado a una estructura de algunos datos. Yo ya tengo el programa de la estructura pero ahora me pidieron ordenarlo por quicksort mediante la comparacion de edad. ya intente guiarme con mi metodo de quicksort hecho donde yo introduzcos los valores a comparar pero Ordenar estructuras, no puedo...

este es el codigo de la estructura:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <stdio.h>
#include <conio.h>
using namespace std;
//Andres Holguin
 
int main()
{
 
	struct {
		char nombre[30],lugarNac[40],sexo;
		int edad;
		float estatura, peso;
 
	}Persona[10];
 
 
	for(int i=0;i<5;i++)
	{
		cout<<"\nNombre: ";
		cin>>Persona[i].nombre;
		cout<<"Lugar de nacimiento: ";
		cin>>Persona[i].lugarNac;
		cout<<"Sexo(m,f): ";
		cin>>Persona[i].sexo;
		cout<<"Edad: ";
		cin>>Persona[i].edad;
		cout<<"Estatura(m): ";
		cin>>Persona[i].estatura;
		cout<<"Peso: ";
		cin>>Persona[i].peso;
		cout<<endl;
		system("cls");
	}
 
	for(int i=0;i<5;i++)
	{
 
		cout<<"\n"<<Persona[i].nombre;
		cout<<endl;
		cout<<"Lugar de nacimiento: "<<Persona[i].lugarNac;
		cout<<endl;
		cout<<"Sexo: "<<Persona[i].sexo;
		cout<<endl;
		cout<<"Edad: "<<Persona[i].edad<<" anios.";
		cout<<endl;
		cout<<"Estatura: "<<Persona[i].estatura<<" metros.";
		cout<<endl;
		cout<<"Peso: "<<Persona[i].peso<<" kg.";
		cout<<endl;
	}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alfil
Val: 4.376
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ordenamiento de estructura

Publicado por Alfil (1270 intervenciones) el 15/03/2019 00:55:02
La salida de datos la he dejado en el formato que habías puesto, aunque sería mucho más correcto ponerlo en forma de lista.

Nombre.......... L.Nacimiento.......... Sexo..........Edad
=========================================
Antonio............ Albacete................... M................40
Luis................. Madrid .......................M...............44
Maria................Barcelona .................F................48


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
#include <cstdlib>
#include <conio.h>
 
using namespace std;
 
const int size = 3;
 
struct P{
    char nombre[30],lugarNac[40],sexo;
    int edad;
    float estatura, peso;
};
 
P Persona[size];
 
void leerDatos();
void imprimirDatos();
void quicksort( int start, int end );
int divide( int start, int end );
 
int main(){
 
    leerDatos();
    quicksort( 0, size - 1 );
    imprimirDatos();
 
    return 0;
 
}
 
void leerDatos(){
 
    for( int i = 0; i < size; i++ ){
        cout << "\nDatos personales (" << i << "/" << size << "):";
		cout << "\nNombre: ";               cin >> Persona[i].nombre;
		cout << "Lugar de nacimiento: ";    cin >> Persona[i].lugarNac;
		cout << "Sexo(m,f): ";              cin >> Persona[i].sexo;
		cout << "Edad: ";                   cin >> Persona[i].edad;
		cout << "Estatura(m): ";            cin >> Persona[i].estatura;
		cout << "Peso: ";                   cin >> Persona[i].peso;
 
		cout << endl;
 
		system("cls");
	}
}
 
void imprimirDatos(){
 
    for( int i = 0; i < size; i++ ) {
 
		cout << "\n"<< Persona[i].nombre
             << "\nLugar de nacimiento: " <<Persona[i].lugarNac
             << "\nSexo: " << Persona[i].sexo
             << "\nEdad: " << Persona[i].edad << " anios."
             << "\nEstatura: " <<Persona[i].estatura << " metros."
             << "Peso: " << Persona[i].peso << " kg." << endl;
	}
}
 
void quicksort( int start, int end ){
    int pivot;
 
    if (start < end) {
        pivot = divide( start, end );
 
        quicksort( start, pivot - 1 );
        quicksort( pivot + 1, end);
    }
}
 
int divide( int start, int end ) {
    int left;
    int right;
    int pivot;
    P temp;
 
    pivot = Persona[start].edad;
    left = start;
    right = end;
 
    while (left < right) {
        while (Persona[right].edad > pivot) {
            right--;
        }
 
        while ((left < right) && (Persona[left].edad <= pivot)) {
            left++;
        }
        if (left < right) {
            temp = Persona[left];
            Persona[left] = Persona[right];
            Persona[right] = temp;
        }
    }
    temp = Persona[right];
    Persona[right] = Persona[start];
    Persona[start] = temp;
 
    return right;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ordenamiento de estructura

Publicado por Andres (2 intervenciones) el 15/03/2019 08:13:52
Muchas gracias! Esta genial!! lo corri en dev c y no me corre, no se porque pero lo corri en el c++ shell online y perfecto!! Muchas gracias! me sirvio bastante
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar