Método de ordenación Burbuja y Quicksort en C

Pues como el asunto dice, os voy a implementar dos funciones para ordenar un array de N elementos utilizando los métodos de ordenación de la burbuja y el Quicksort. No voy a poner todo el programa, sino necesitaría varias páginas de esta web y creo que resumiendo en funciones, es más que suficiente. Explicare entonces cual es la mecánica de ordenación con método Burbuja y con Quicksort:

Burbuja: O llamado Bubble Sort, compara cada elemento con el siguiente y cambia el valor según la condición (si quieres ordenar de mayor a menor, o de menor a mayor). Es el algoritmo de ordenación más sencillo.

QuickSort: Es un algoritmo que se basa en dividir en partes más simples tantas veces como sea necesario para poder averiguar el resultado. Es muy rápido, pero también puede ser inestable.

Metodo ordenación Burbuja:

void ordenarmenor(int *unarray, int lalong) {
         int aux, i, j;

         for (i = 0; i < lalong -1 ; i++) {
                 for (j = i + 1; j < lalong ; j++) {
                         if (unarray[i] > unarray[j]) {
                                aux = unarray[i];
                                unarray[i] = unarray[j];
                                unarray[j] = aux;
                         }
                }
         }
}
void ordenarmayor(int *unarray, int lalong) {
         int aux, i, j;

         for (i = 0; i < lalong -1 ; i++) {
                 for (j = i + 1; j < lalong ; j++) {
                         if (unarray[i] < unarray[j]) {
                                aux = unarray[i];
                                unarray[i] = unarray[j];
                                unarray[j] = aux;
                         }
                }
         }
}

Método ordenación QuickSort:

int pivot(int *unarray, int izq, int der)
{
    int i;
    int pivote, valor_pivote;
    int aux;

    pivote = izq;
    valor_pivote = unarray[pivote];
    for (i=izq+1; i<=der; i++){
        if (unarray[i] < valor_pivote){
                pivote++;
                aux=unarray[i];
                unarray[i]=unarray[pivote];
                unarray[pivote]=aux;

        }
    }
    aux=unarray[izq];
    unarray[izq]=unarray[pivote];
    unarray[pivote]=aux;
    return pivote;
}

void Quicksort(int *unarray, int izq, int der)
{
     int pivote;
     if(izq < der){
        pivote=pivot(unarray, izq, der);
        Quicksort(unarray, izq, pivote-1);
        Quicksort(unarray, pivote+1, der);
     }
}

Para poder llamar a las funciones desde el programa principal, es tan simple como ejecutar la función con los valores adecuados, por ejemplo:


   int miarray[N];
   ordenarmenor(miarray, N);
   ordenarmayor(miarray, N);
   Quicksort(miarray, 0, N-1);

Donde "miarray" es un array de números enteros con una longitud N (por ejemplo 10 elementos). Evidentemente no tenemos que decir que el array debe contener números, para que se pueda ordenar.

Descargar: CÓDIGO FUENTE EJEMPLO

En el programa que os pongo para descargar, es una aplicación que tiene más opciones, e reunido en ella muchas de las funciones que ya e implementado en otras aplicaciones más pequeñas, con la aplicación podrá realizar las siguientes operaciones con el array de números enteros: inicializar, rellenar, imprimir, maximo, minimo, media, ordenación (metodo burbuja mayor-menor y menor-mayor, metodo QuickSort). Espero que sea de vuestro agrado

Como he dicho en otras ocasiones, las apliaciones en la mayoria de casos no tiene controles para los datos que se introducen por teclado. Eso sera otro apartado que comentare más adelante para que las aplicaciones sean estables y robustas.

Esta entrada fue publicada en Código C y etiquetada , , , , , , , , , , , , , , , . Guarda el enlace permanente.

7 respuestas a Método de ordenación Burbuja y Quicksort en C

  1. Mauricio arregui dijo:

    Excelente!!

  2. Itzyare dijo:

    Quicksort me ha dejado impresionado D:

  3. anonim dijo:

    el método de burbuja, me salio a la perfección, pero el seg. método se me complico analizarlo completamente… necesito practicar mas… gracias…

  4. Joshua dijo:

    Mil gracias hermanó

  5. Anamarys dijo:

    hola gracias por el dato, queria preguntarte porque el codigo de quicksort esta generico, pero me queda una duda, entonces creo el array y dentro el valor de izq entonces se lo asigno yo del array no? porq como el va a saber cual es el valor de la izq? gracias

  6. Tijua dijo:

    Esta genial eres grande

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.