Mirad, si yo compilo este código, puedo ver que el indice del pivote es modificado siquiera no se realice ningún movimiento de los elementos del array. Es más, ni siquiera se llama a sí misma ni una sola vez y la variable es modificada, por qué? no lo sé....
#include <stdio.h>
#include <stdlib.h>
#define LON 20
void quick_sort(int *vector, int izq, int der);
void quick_sort_malo(int *vector, int left, int right);
main()
{
srand(time(NULL));
int vector[LON], indice;
for(indice=0;indice<LON;indice++)
vector[indice]=(int)(((((double)rand())/((double)RAND_MAX))*200)+1);
quick_sort(vector,0,LON-1);
quick_sort_malo(vector,0,LON-1);
for(indice=0;indice<LON;indice++)
printf("%d \n", vector[indice]);
return 0;
}
void quick_sort_malo(int *vector, int left, int right)
{
int aux, izq, der;
int central=(left+right)/2;
izq=left;
der=right;
do
{
while(vector[izq]<vector[central])
{
printf("\nVector[central] malo ---> %d", vector[central]);
izq++;
}
printf("\n[central] malo ---> %d", central);
return;
while(vector[der]>vector[central]) der--;
if(izq<der){
aux=vector[izq];
vector[izq]=vector[der];
vector[der]=aux;
izq++;
der--;
}
else if(izq==der) izq++;
}while(izq<=der);
if(der>left) quick_sort_malo(vector, left, der);
if(izq<right) quick_sort_malo(vector, izq,right);
}
void quick_sort(int *vector, int left, int right)
{
int aux, izq, der;
int central=vector[(left+right)/2];
izq=left;
der=right;
do
{
while(vector[izq]<central)
{
printf("\nVector[central] bueno ---> %d", central);
izq++;
}
printf("\n[central] bueno ---> %d", (left+right)/2);
return;
while(vector[der]>central) der--;
if(izq<der){
aux=vector[izq];
vector[izq]=vector[der];
vector[der]=aux;
izq++;
der--;
}
else if(izq==der) izq++;
}while(izq<=der);
if(der>left) quick_sort(vector, left, der);
if(izq<right) quick_sort(vector, izq,right);
}