Página 1 de 1

[Métodos de ordenamiento] QuickSort [C++]

Publicado: 28 Jul 2015, 22:35
por 2Fac3R
Buenas!.

El método de ordenamiento [Enlace externo eliminado para invitados]es un método muy eficaz a la hora de ordenar datos, les comparto un código que implemente en un proyecto escolar, está basado para ordenar fechas de salida de vuelos, pero ustedes pueden implementarlo para ordenar cualquier otro tipo de dato.
void QuickSortF( N_Vuelo** arr, int izq, int der ){
        int g, h, medio;
        N_Vuelo *pivote, *aux;
        medio = ( izq + der )/2;
        pivote = arr[medio];
        g = izq;
        h = der;
 
        while( g <= h ){
 
                while ( arr[g]->getDato()->getFS(1) < pivote->getDato()->getFS(1) ) { g++; }
                while ( pivote->getDato()->getFS(1) < arr[h]->getDato()->getFS(1) ) { h--; }
 
                if( g <= h ){
                        aux = arr[g];
                        arr[g] = arr[h];
                        arr[h] = aux;
                        g++;
                        h--;
                }
        }
 
        if ( izq < h ) { QuickSortF(arr, izq, h); }
        if ( g < der ) { QuickSortF(arr, g, der); }
}
En los condicionales if iría la condición de ordenamiento de el tipo de dato que quieras implementar, cualquier duda y/o comentario hazmelo saber!.

Zalu2

Re: [Métodos de ordenamiento] QuickSort [C++]

Publicado: 29 Jul 2015, 00:05
por crack81
Se ve bien haber si muestras la estructura N_Vuelo de manera completa
Saludos...

Re: [Métodos de ordenamiento] QuickSort [C++]

Publicado: 29 Jul 2015, 01:14
por 2Fac3R
N_Vuelo.h
// N_VUELO.H
#include <iostream>
using namespace std;

#include "Vuelo.h"

#ifndef __N_VUELO_H_INCLUDED__
#define __N_VUELO_H_INCLUDED__

class N_Vuelo{
	private:
		Vuelo dato;
		N_Vuelo* siguiente;
		N_Vuelo* anterior;

	public:
		N_Vuelo(void) { siguiente = anterior = NULL; }

		N_Vuelo( Vuelo* v, N_Vuelo* s = NULL, N_Vuelo* a = NULL ){
			dato = *v;

			siguiente = s;
			anterior = a;
		}

		void setDato( Vuelo* d )    { dato = *d; }
		void setSig( N_Vuelo* pos ) { siguiente = pos; }
		void setAnt( N_Vuelo* pos ) { anterior = pos; }

		Vuelo* getDato()  { return &dato; }
		N_Vuelo* getSig() { return siguiente; }
		N_Vuelo* getAnt() { return anterior; }
};

#endif
Te podría pasar vuelo.h (te tendría que pasar muchos más ligados) pero la idea ya está reflejada, cualquier duda o comentario es bienvenido.
Zalu2