Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <cstdio>
- #define N 10
- void intercambiar(int datos[], int i, int j){
- int temp;
- temp = datos[i];
- datos[i] = datos[j];
- datos[j] = temp;
- }
- void quicksort(int datos[], int izq, int der){
- int limite,i;
- if(izq>=der) return; //Condición de salida
- intercambiar(datos,izq,(izq+der)/2); //Con el pivote se intercambia
- limite = izq;
- for(i=izq+1;i<=der;i++)
- if(datos[izq]>datos[i]) intercambiar(datos,++limite,i); //Condición de intercambio
- intercambiar(datos,izq,limite);
- quicksort(datos,izq,limite-1);
- quicksort(datos,limite+1,der);
- }
- void quicksortIndices(int datos[], int izq, int der, int indices[]){
- int limite,i;
- if(izq>=der) return; //Condición de salida
- intercambiar(indices,izq,(izq+der)/2); //Con el pivote se intercambia
- limite = izq;
- for(i=izq+1;i<=der;i++)
- if(datos[indices[izq]]>datos[indices[i]]) intercambiar(indices,++limite,i); //Condición de intercambio
- intercambiar(indices,izq,limite);
- quicksortIndices(datos,izq,limite-1,indices);
- quicksortIndices(datos,limite+1,der,indices);
- }
- void imprimeArreglo(int arreglo[], int tamano){
- for(int i=0;i<tamano;i++)
- printf("%d ", arreglo[i]);
- printf("\n");
- }
- void inicializacionIndices(int indices[], int tamanoArreglo){
- for(int i=0;i<tamanoArreglo;i++)
- indices[i] = i;
- }
- int main(int argc, char** argv) {
- int arreglo[N] = {9,3,4,2,1,5,6,10,7,8};
- printf("Arreglo Original: \n");
- imprimeArreglo(arreglo,N);
- printf("Arreglo Ordenado: \n");
- quicksort(arreglo,0,N-1);
- imprimeArreglo(arreglo,N);
- //Probando el quicksort de indices con el arreglo original
- int arreglo2[N] = {9,3,4,2,1,5,6,10,7,8};
- int indices[N];
- inicializacionIndices(indices, N); //La inicializacion del arreglo de indices, indices[N] = {0,1,2,3,4,5,6,7,8,9,...} depende del tamaño del arreglo
- printf("Arreglo Indices Ordenados del Arreglo Original:\n");
- quicksortIndices(arreglo2,0,N-1,indices);
- imprimeArreglo(indices,N);
- return 0;}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement