quicksort
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;
}
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;
}
