Codigo
Genera Matriz [20][2]
Muestro
Arreglo
- C=Columna 2, la que deseo arreglar, todos los elementos es como si fuera un quicksort estuvieran en la columna 2
- Los 3 for es hacer lo que hace el metodo para guardar una fila completa y guardarla.
Código:
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> /* El tamaño del arreglo: solo 20 */ #define TAM 20 #define M 2 #define C 2 double generar_elementos (double arreglo[][M]); /* Genera numeros aleatorios para llenar el arreglo */ void mostrar (double arreglo[][M]); /* Imprime el arreglo */ void quicksort (double arreglo[][M], int inf, int sup); /* Ordenamiento rapido */ int main() { double arreglo[TAM][2]; /*Array */ generar_elementos(arreglo); // printf("Arreglo original:"); mostrar(arreglo); /* Ordena arreglo por quicksort */ quicksort(arreglo, 0, TAM - 1); printf("Arreglo ordenado por quicksort"); mostrar(arreglo); getch(); } double generar_elementos (double arreglo[][M]) { int i,j; /* Introducimos una semilla para los n£meros aleatorios */ srand ((unsigned) time(NULL)); for (i=0; i<TAM; i++) for (j=0; j<2; j++) arreglo[i][j] = rand()%TAM; /* Solo numeros pequenios... */ return TAM; } void mostrar (double arreglo[][M]) { int i; for (i=0; i<TAM; i++) printf ("\n\tElemento[%2d] = %f y %f y %f ", i, arreglo[i][0],arreglo[i][1],arreglo[i][2]); printf ("\n\n"); } void quicksort (double arreglo[][M], int inf, int sup) { double elem_div = arreglo[sup][C]; double temp[5]; double tempi; int i = inf - 1, j = sup; int cont = 1; if (inf >= sup) /* Se cruzaron los indices ? */ return; while (cont) { while (arreglo[++i][C] < elem_div); while (arreglo[--j][C] > elem_div); /* ¨Se cumple la condici¢n ? */ if (i < j) { for(int r=0;r<=2;r++) {temp[r]=arreglo[i][r]; }//printf ("%f", temp[r]); for(int r=0;r<=2;r++) {arreglo[i][r]=arreglo[j][r];}//printf ("/n/n%f", arreglo[i][r]);}//printf ("%2d", r); for(int r=0;r<=2;r++) {arreglo[j][r]=temp[r];} //tempi = arreglo[i][C]; //arreglo[i][C] = arreglo[j][C]; //arreglo[j][C] = tempi; } else cont = 0; } /* Dejamos el elemento de divisi¢n en su posici¢n final */ for(int r=0;r<=2;r++) { temp[r]=arreglo[i][r];} for(int r=0;r<=2;r++) {arreglo[i][r]=arreglo[sup][r];} for(int r=0;r<=2;r++) {arreglo[sup][r]=temp[r];} //tempi = arreglo[i][C]; //arreglo[i][C] = arreglo[sup][C]; //arreglo[sup][C] = tempi; //printf ("\n\%2d", i); /* Aplicamos recursivamente a los subarreglos generados */ quicksort (arreglo, inf, i - 1); quicksort (arreglo, i + 1, sup); }
Lllevo 3 dias donde puede estar el error, y no consigo localizar y la cabeza empieza a estar como un bombo :D.
Un Saludo y gracias