next up previous
Next: Algoritmos de búsqueda en Up: Algoritmos. Previous: Algoritmos.

Algoritmos de ordenación.

  1. Selección.

    void Seleccion (int matriz[], int n)
    {
      register int i,j;
      int mini;
    
      for (j=0;j<n-1;j++) {
        mini=j;
        for (i=j+1;i<n;i++)
          if (matriz[i]<matriz[mini])
            mini=i;
        i= matriz[j];
        matriz[j]= matriz[mini];
        matriz[mini]=i;
      }
    }
    

  2. Inserción.

    void Insercion (int matriz[], int n)
    {
      register int i,j;
      int v;
    
      for (i=1;i<n;i++) {
        v=matriz[i];
        j=i;
        while (matriz[j-1]>v) {
          matriz[j]= matriz[j-1];
          j=j-1;
          if (j==0) break;
        } 
        matriz[j]= v;
      }
    }
    

  3. Burbuja.

    void Burbuja (int matriz[], int n)
    {
      register int i,j;
      int aux;
    
      for (i=n-1;i>0;i--) 
        for (j=1;j<=i;j++)
          if (matriz[j-1]>matriz[j]) {
            aux= matriz[j];
            matriz[j]= matriz[j-1];
            matriz[j-1]=aux;
          }
    }
    

  4. Selección recursivo.
    void SeleccionRecursivo (int matriz[], int n)
    {
      register int i;
      int mini;
    
      if (n>1) {
        mini=0;
        for (i=1;i<n;i++)
          if (matriz[i]<matriz[mini])
            mini=i;
        i= matriz[0];
        matriz[0]= matriz[mini];
        matriz[mini]=i;
        SeleccionRecursivo (matriz+1,n-1);
      }
    }
    

  5. Ordenación por mezcla.

    void OrdenMezcla (int matriz[], int izqda, int drcha, int auxiliar[])
    {
      int i,j,k,centro;
    
      if (drcha-izqda>0) {
        centro=(izqda+drcha)/2;
        OrdenMezcla (matriz,izqda,centro,auxiliar);
        OrdenMezcla (matriz,centro+1,drcha,auxiliar);
        for (i=centro; i>=izqda; i--) auxiliar[i]=matriz[i];
        for (j=centro+1; j<=drcha; j++) auxiliar[drcha+centro+1-j]= matriz[j];
        i=izqda;
        j=drcha;
        for (k=izqda; k<=drcha; k++)
        if (auxiliar[i]<auxiliar[j]) {
          matriz[k]=auxiliar[i];
          i=i+1;
        }
        else {
          matriz[k]=auxiliar[j];
          j=j-1;
        }
      }
    }
    



J. Fdez-Valdivia 2001-03-09