Rotar array en C: ejercicio resuelto
Rotar array en C: ejercicio resuelto
Si buscas rotar array en C ejercicio resuelto, aquí tienes el algoritmo de tres reversiones (three-reversal trick): rota un array k posiciones a la izquierda o a la derecha en O(n) tiempo y O(1) espacio extra, sin necesitar un buffer auxiliar.
La idea es que rotar un array equivale a invertir tres subsecuencias: el bloque que se desplaza, el resto y luego todo el array.
Enunciado
Dado el array {1, 2, 3, 4, 5, 6, 7}:
- Rótalo 3 posiciones a la izquierda →
{4, 5, 6, 7, 1, 2, 3}. - Rótalo 2 posiciones a la derecha →
{6, 7, 1, 2, 3, 4, 5}.
Usa el algoritmo de tres reversiones en ambos casos.
Solución en C
Resultado esperado
Errores frecuentes
- No reducir
kconk %= n: sik >= nse intentan acceder índices fuera del array al calculark - 1. - Confundir izquierda con derecha: rotar a la izquierda
kposiciones es equivalente a rotar a la derechan - kposiciones. - Usar un buffer auxiliar de tamaño
k: correcto en funcionalidad pero usa O(k) espacio extra; el algoritmo de tres reversiones es O(1). - Invertir los índices incorrectamente: los tres rangos deben ser
[0, k-1],[k, n-1]y[0, n-1]para la rotación izquierda, en ese orden.
Aplicación práctica
La rotación de arrays se usa en buffers circulares, en la implementación de colas FIFO con array, en el procesamiento de señales (desplazamiento de ventanas) y en problemas de texto como la rotación de cadenas para detectar anagramas de rotación.
Siguiente ejercicio recomendado
- Máximo subarray: Kadane en C: ejercicio resuelto
- Dos punteros en C: ejercicio resuelto
- Matriz transpuesta 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
¿Por qué el algoritmo de tres reversiones funciona?
Rotar a la izquierda k posiciones transforma [A|B] en [B|A]. Si invertimos A → [A'|B], luego invertimos B → [A'|B'] y finalmente invertimos todo → [B|A]. Las tres inversiones in-place logran la rotación sin copias.
¿Cómo manejar k mayor que n?
Con k %= n. Rotar n posiciones equivale a no rotar. Con el módulo, k = 9 en un array de 7 elementos equivale a k = 2.
¿Es posible rotar una cadena con el mismo algoritmo?
Sí. Una cadena en C es un array de char, por lo que invertir y rotar_izquierda funcionan exactamente igual sustituyendo int por char y pasando strlen(s) como n.