Método de ordenación shell sort en C
Si buscas shell sort en C ejercicio resuelto, este ejemplo te ayuda a entender la lógica completa, no solo el código final.
Shell sort mejora la inserción directa usando saltos (gaps). En lugar de comparar siempre elementos contiguos, compara elementos alejados y va reduciendo el salto hasta llegar a 1. Es un algoritmo in-situ (no necesita un array auxiliar grande) y suele rendir mejor que burbuja o inserción directa en arrays medianos.
Estrategia de shell sort
- Elige un
gapinicial, normalmenten / 2. - Recorre el array aplicando inserción directa, pero entre posiciones separadas por
gap. - Reduce el
gap(gap /= 2) y repite. - Cuando
gapllega a1, haces la última pasada equivalente a inserción directa clásica.
Enunciado
Implementa shell sort para ordenar un array de enteros en orden ascendente.
Solución en C
#include <stdio.h>
void shell_sort(int a[], int n) {
for (int gap = n / 2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
int tmp = a[i];
int j = i;
while (j >= gap && a[j - gap] > tmp) {
a[j] = a[j - gap];
j -= gap;
}
a[j] = tmp;
}
}
}
int main(void) {
int a[] = {29, 10, 14, 37, 13, 5, 42, 8};
int n = (int)(sizeof(a) / sizeof(a[0]));
shell_sort(a, n);
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}Salida esperada
5 8 10 13 14 29 37 42Errores frecuentes
- Reducir mal el
gapy quedarse en bucle infinito. - No guardar el valor temporal (
tmp) antes de desplazar. - Usar condición incorrecta en el
whiley perder elementos. - Pensar que la complejidad es fija: depende de la secuencia de gaps.
Aplicación práctica
Shell sort es útil cuando:
- quieres una solución sencilla de implementar,
- buscas mejor rendimiento que inserción directa sin usar mucha memoria,
- trabajas con tamaños de entrada donde quicksort puede ser excesivo para un ejercicio didáctico.
Siguiente ejercicio recomendado
- Ordenación por inserción directa en C: ejercicio resuelto
- Inserción binaria en C: ejercicio resuelto de ordenación
- Merge sort en C: ejercicio resuelto
- Todos los ejercicios de C
Práctica guiada y libro completo
Si quieres una ruta completa con progresión real de dificultad:
FAQ
¿Shell sort en C es mejor que inserción directa?
En muchos casos sí, porque adelanta trabajo con gaps grandes y deja menos desorden para la pasada final.
¿Qué complejidad tiene shell sort?
Depende de la secuencia de gaps. Con divisiones simples por 2 puede acercarse a O(n²), pero en práctica suele mejorar mucho frente a inserción directa.
¿Cómo practico shell sort sin memorizar?
Traza dos pasadas a mano con gap = n/2 y gap = n/4, luego compáralo contra inserción directa con el mismo array.