Duda con ordenacion por partición/quicksort Duda

B

vereis estoy en un modulo de asi, y nuestra profesora nos ha mandado que pasemos un pseudocódigo que ella nos puso en la pizarra a c

la verdad es que se equivocó bastantes veces pero al final le salió; el problema viene cuando voy a pasarlo a c y me salen 3 errores del mismo tipo al compilar

[Linker error] undefined reference to `quicksort' (WTF?)

os dejo el código (lo hice para ordenar un vector de caracteres), si le veis alguna posible mejora hacédmela saber

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
int particion (char vector[40],int i,int j);
main()
{
char vector[40];
int i,j,pivote;
printf("Introduce una palabra: ");
gets(vector);
i=0,j=strlen(vector);
pivote=i+j/2;
quicksort(vector,i,j);
if(i<j)
{
pivote=particion(vector,i,j);
quicksort(vector,i,pivote-1);
quicksort(vector,j,j+1);
}
printf("%s\n",vector);
system("PAUSE");
}

//funcion que ordena

int particion (char vector[40],int i,int j)
{
int pivote;
char aux;
pivote=i+j/2;
while(i<=j)
{
while(vector<vector[pivote])
{
i++;
}
while(vector[j]>vector[pivote])
{
j--;
}
if(i<j)
{
aux=vector;
vector=vector[j];
vector[j]=aux;
}
aux=vector[j];
vector[j]=vector[pivote];
vector[pivote]=aux;
}
return j;
}

pd: para verlo mejor (no me cabian las librerias en la captura.. soz)
http://img246.imageshack.us/img246/7498/wtfxb9.jpg :)

javithelong

Lógicamente, te falta la función quicksort...

Creo que has hecho el main intentando que fuera quicksort, pero tu funcion quicksort se llama main, no se si me explico.

Cambia tu main a una función que se llame quicksort, y crea otro main que llame a quicksort con los parámetros iniciales.

Si sigues sin entenderlo, avisa y me intento explicar mejor, que me acabo de levantar xD

Un saludo

Soltrac

Mmmm...está mal, pq no tienes función quicksort

Intentaré ponerte el código, pero hace 4 o 5 años q no toco C, así que perdona si no te compila y q me lo revise alguien q esté con C ahora mismo ;), ya que si estuviera en C++, usaría el paso por referencia. Sobre todo revisar el paso de vectores en funciones, q creo q va a dar problemas :)

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
int particion (char* vector,int i,int j);
char* quicksort(char* vector, int i, int j);

main()
{
char vector[40];
int i,j,pivote;
printf("Introduce una palabra: ");
gets(vector);
i=0,j=strlen(vector);
pivote=i+j/2;
vector=quicksort(vector,i,j);
printf("%s\n",vector);
system("PAUSE");
}

//Función quicksort
char* quicksort(char* vector, int i, int j)
{
int pivote;
if(i<j)
{
pivote=particion(vector,i,j);
vector=quicksort(vector,i,pivote-1);
vector=quicksort(vector,j,j+1);
}
return vector;
}

//funcion que ordena
int particion (char* vector,int i,int j)
{
int pivote;
char aux;
pivote=i+j/2;
while(i<=j)
{
while(vector<vector[pivote])
{
i++;
}
while(vector[j]>vector[pivote])
{
j--;
}
if(i<j)
{
aux=vector;
vector=vector[j];
vector[j]=aux;
}
aux=vector[j];
vector[j]=vector[pivote];
vector[pivote]=aux;
}
return j;
}

PD: No recuerdo si en C es char* vector o char *vector, si no, cambiar por char vector[] y debería funcionar.

B

voy a probar lo que deciis, muchas gracias a los dos :)

Usuarios habituales