Código:
Lo único que haces es intercambiar los valores cuando a[i-1] es mayor que a[i]
Ordenación por inserción:
Código
void ord_ins(int v[], int n) { int i,j,x; for (i=1;i<n;i++) { x = v[i]; j = i-1; while ( (j>-1) && (v[j]>x) ) v[j+1] = v[j--]; v[j+1] = x; } }
Ordenación por quicksort (mediana de 3). Teniendo en cuenta la macro UMBRAL:
Código
void ord_ins(int v[], int n) { int i,j,x; for (i=1;i<n;i++) { x = v[i]; j = i-1; while ( (j>-1) && (v[j]>x) ) v[j+1] = v[j--]; v[j+1] = x; } } void intercambiar(int v[], int izq, int der) { int t; t = v[izq]; v[izq] = v[der]; v[der] = t; } void mediana3 (int v[], int izq, int der) { int k = (int)((izq+der)/2); if ( v[k] > v[der] ) intercambiar(v, k, der); if ( v[k] < v[izq] ) intercambiar(v, k, izq); if ( v[k] > v[der] ) intercambiar(v, k, der); } void quicksort(int v[], int n) { void ordenarAux(int v[], int izq, int der) { if ( izq+UMBRAL <= der ) { mediana3(v,izq,der); int pivote = v[izq]; int i = izq; int j = der; do { do i++; while ( v[i] < pivote ); do j--; while ( v[j] > pivote ); intercambiar(v, i, j); } while (j > i); intercambiar(v,i,j); intercambiar(v,izq,j); ordenarAux(v,izq,j-1); ordenarAux(v,j+1,der); } } ordenarAux(v,0,n-1); if ( UMBRAL == 1 ) ord_ins(v,n); }
Ahí tienes dos algoritmos de ordenación en C. Los tengo a mano porque tengo que implementarlos y analizar su complejidad para una práctica en estos momentos.
Saludos.