Buenas noches.
He escrito el siguiente código pero me da error al final, la función quicksort funciona bien si elimino las 2 últimas líneas pero entonces no termina de ordenar el arreglo.
¿Podría alguien decirme donde está el error?
Muchas gracias
// Ejercicio 7.24: Ordenamiento Quicksort //
#include <stdio.h>
void quicksort ( int arreglo[], int tamanio, int inicio, int fin);
void intercambio (int *ptr1, int *ptr2);
void particion (int arreglo[], int tamanio, int izq, int dcha);
main()
{
int i;
int arreglo [10] = {37,2,6,4,89,8,10,12,68,45};
printf("Arreglo desordenado\n\n");
for(i = 0; i < 10; i++)
{
printf("%d ", arreglo[i]);
}
quicksort(arreglo, 10, 0, 9);
printf("\n\nArreglo ordenado\n\n");
for(i = 0; i < 10; i++)
{
printf("%d ", arreglo[i]);
}
return 0;
}
void quicksort( int arreglo[], int tamanio, int inicio, int fin)
{
int i, elemento, lim_elemento;
if (inicio >= fin )
{
return;
}
else
{
for (i = fin; arreglo[i] > arreglo[inicio]; i--)
{
;
}
intercambio(&arreglo[inicio], &arreglo[i]);
elemento = i;
for (i = inicio; arreglo[i] < arreglo[elemento]; i++)
{
;
}
intercambio(&arreglo[elemento], &arreglo[i]);
lim_elemento = elemento;
elemento = i;
for (i = lim_elemento-1; arreglo[i] > arreglo[elemento]; i--)
{
;
}
intercambio(&arreglo[elemento], &arreglo[i]);
lim_elemento = elemento;
elemento = i;
for (i = lim_elemento+1; arreglo[i] < arreglo[elemento]; i++)
{
;
}
intercambio(&arreglo[elemento], &arreglo[i]);
lim_elemento = elemento;
elemento = i;
printf("\n%d\n\n", i);
particion(arreglo, 10, 0, elemento -1);
particion(arreglo, 10, elemento + 1, 9);
}
}
void particion (int arreglo[], int tamanio, int izq, int dcha)
{
quicksort(arreglo, 10, izq, dcha);
}
void intercambio (int *ptr1, int *ptr2)
{
int temp;
temp = *ptr1;
*ptr1 = *ptr2;
*ptr2 = temp;
}
La otra variante de código que he escrito es las siguiente, pero me ocurre lo mismo.
// Ejercicio 7.24: Ordenamiento Quicksort //
#include <stdio.h>
void quicksort ( int arreglo[], int tamanio, int inicio, int fin);
void intercambio (int *ptr1, int *ptr2);
int particion (int arreglo[], int tamanio, int izq, int dcha);
main()
{
int i;
int arreglo [10] = {37,2,6,4,89,8,10,12,68,45};
printf("Arreglo desordenado\n\n");
for(i = 0; i < 10; i++)
{
printf("%d ", arreglo[i]);
}
quicksort(arreglo, 10, 0, 9);
printf("\n\nArreglo ordenado\n\n");
for(i = 0; i < 10; i++)
{
printf("%d ", arreglo[i]);
}
return 0;
}
void quicksort( int arreglo[], int tamanio, int inicio, int fin)
{
int posicion;
if (inicio >= fin )
{
return;
}
else
{
posicion = particion(arreglo, tamanio, inicio, fin);
quicksort(arreglo, 10, inicio, posicion -1);
quicksort(arreglo, 10, posicion + 1, fin);
}
}
int particion (int arreglo[], int tamanio, int inicio, int fin)
{
int i, elemento, lim_elemento;
for (i = fin; arreglo[i] > arreglo[inicio] ; i--)
{
;
}
intercambio(&arreglo[inicio], &arreglo[i]);
elemento = i;
for (i = inicio; arreglo[i] < arreglo[elemento] ; i++)
{
;
}
intercambio(&arreglo[elemento], &arreglo[i]);
lim_elemento = elemento;
elemento = i;
for (i = lim_elemento-1; arreglo[i] > arreglo[elemento]; i--)
{
;
}
intercambio(&arreglo[elemento], &arreglo[i]);
lim_elemento = elemento;
elemento = i;
for (i = lim_elemento+1; arreglo[i] < arreglo[elemento]; i++)
{
;
}
intercambio(&arreglo[elemento], &arreglo[i]);
lim_elemento = elemento;
elemento = i;
return elemento;
}
void intercambio (int *ptr1, int *ptr2)
{
int temp;
temp = *ptr1;
*ptr1 = *ptr2;
*ptr2 = temp;
}