quicksort

sr_pop
19 de Mayo del 2004
estoy haciendo un algoritmo de quicksort y me falla; y por mucho que lo analizo no le encuentro el fallo.
Les pongo la clase en c++ a ver si me pueden echar un cable.

Gracias

#ifndef _QUICKSORT_H_
#define _QUICKSORT_H_

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>

class Quicksort{

private:

int * nombres;
int dimensio;

public:

Quicksort();
Quicksort(int mida);
void Plena();
void Quick(int * nombres,int i,int j);
void Ordena();
void Mostra();
~Quicksort();

};

#endif

--------------------------------------------------------------------------------
#include "Quicksort.h"

Quicksort::Quicksort(){

}

Quicksort::Quicksort(int mida){

dimensio=mida;

nombres=new int [dimensio];

}

void Quicksort::Plena(){

int tmp;

for(int i=0;i<dimensio;i++){

cout<<"entra un nombre"<<endl;
cin>>tmp;

nombres[i]=tmp;

}

}

void Quicksort::Quick(int * nombres,int inferior,int superior){

int i,j,swap,divisor;

divisor=nombres[superior];
i=inferior;
j=superior-1;

if(inferior>superior){

return;

}

while(i<j){

while(nombres[i]<divisor){i++;}

while(nombres[j]>divisor){j--;}

if(nombres[i]>nombres[j]){

swap=nombres[i];
nombres[i]=nombres[j];
nombres[j]=swap;
i++;
j--;

}

}

swap=nombres[i];
nombres[i]=nombres[superior];
nombres[superior]=swap;

Mostra();

Quick(nombres,inferior,i-1);
Quick(nombres,i+1,superior);


}

void Quicksort::Ordena(){

Quick(nombres,0,dimensio-1);

}


void Quicksort::Mostra(){

for(int i=0;i<dimensio;i++){

cout<<nombres[i]<<"|";

}

cout<<endl;

}

Quicksort::~Quicksort(){

delete []nombres;

}


noel solw
19 de Mayo del 2004
Mira el programa de QuickSort en C++ esta en el foro, hay que buscarlo nada mas.
Lo que tu has hecho, es un poco complicado.
Estas seguro de que pidieron clases ?
Contestame, tratare de ayudarte si puedo.