Puede hacer esto en tiempo lineal en una sola pasada.
La clave es notar que solo necesita preservar las relaciones de comparación entre vecinos inmediatos. Así es cómo:
Los primeros dos elementos ya están ordenados por meneo, porque su orden no importa.
Digamos que las primeras n posiciones de la matriz ya están ordenadas y A [n-1] A [n -1]).
- ¿Cuáles son sus experiencias de entrevista con empresas tecnológicas en Bangalore?
- Algoritmo para dividir un número en un grupo ordenado diferente de modo que la suma de esos números sea el número original
- ¿Cuáles son las preguntas principales de la entrevista Java?
- Cómo resolver problemas de codificación sin confundirse
- Cómo prepararse para una pasantía técnica de verano en Google en India
Deje que el orden ordenado de (A [n-1], A [n], A [n + 1]) sea (m1, m2, m3).
Afirmo que si asigna A [n-1] = m1, A [n] = m3, A [n + 1] = m2, los primeros n + 1 elementos se ordenarán de forma ondulada.
Prueba:
– Los primeros elementos n-2 no se modifican, por lo tanto, desde el supuesto de que se clasificaron de forma ondulada, todavía se ordenan de forma ondulada.
– Teníamos A [n-2]> A [n-1] antes, así que definitivamente tenemos A [n-2]> m1.
– Tenemos m1 m2, por lo que A [n-1], A [n], A [n + 1] continúa el patrón de meneo.
Si A [n-1]> A [n], desea asignar A [n-1] = m3, A [n] = m1, A [n + 1] = m2, y la prueba es la misma.
Repita esto hasta que todos los elementos se ordenen.
En tu ejemplo:
n = 2: 1, 2, 8, 9, 3, 5 (matriz inicial)
n = 3: 1, 8, 2, 9, 3, 5
n = 4: 1, 9, 2, 8, 3, 5
n = 5: 1, 9, 2, 8, 3, 5
n = 6: 1, 9, 2, 8, 3, 5