Dada una array de n elementos. Nuestra tarea es escribir un programa para reorganizar el arreglo de modo que los elementos en las posiciones pares sean mayores que todos los elementos anteriores y los elementos en las posiciones impares sean menores que todos los elementos anteriores.
Ejemplos:
Input : arr[] = {1, 2, 3, 4, 5, 6, 7} Output : 4 5 3 6 2 7 1 Input : arr[] = {1, 2, 1, 4, 5, 6, 8, 8} Output : 4 5 2 6 1 8 1 8
La idea para resolver este problema es crear primero una copia auxiliar de la array original y ordenar la array copiada. Ahora el número total de posiciones pares en la array con n elementos será piso (n/2) y el resto es el número de posiciones impares. Ahora llene las posiciones pares e impares en la array original usando la array ordenada de la siguiente manera:
- El total de posiciones impares será n – piso (n/2). Comience desde (n-piso (n/2)) la posición en la array ordenada y copie el elemento en la primera posición de la array ordenada. Comience a recorrer la array ordenada desde esta posición hacia la izquierda y siga llenando las posiciones impares en la array original hacia la derecha.
- Comience a recorrer la array ordenada a partir de (n-piso (n/2) + 1) ª posición hacia la derecha y siga llenando la array original a partir de la segunda posición.
A continuación se muestra la implementación de la idea anterior:
Javascript
<script> // Javascript program to rearrange the array // as per the given condition // function to rearrange the array function rearrangeArr(arr, n) { // total even positions let evenPos = Math.floor(n / 2); // total odd positions let oddPos = n - evenPos; let tempArr = new Array(n); // copy original array in an // auxiliary array for (let i = 0; i < n; i++) tempArr[i] = arr[i]; // sort the auxiliary array tempArr.sort(); let j = oddPos - 1; // fill up odd position in original // array for (let i = 0; i < n; i += 2) { arr[i] = tempArr[j]; j--; } j = oddPos; // fill up even positions in original // array for (let i = 1; i < n; i += 2) { arr[i] = tempArr[j]; j++; } // display array for (let i = 0; i < n; i++) document.write(arr[i] + " "); } // Driver code let arr = [ 1, 2, 3, 4, 5, 6, 7 ]; let size = arr.length; rearrangeArr(arr, size); //This code is contributed by Mayank Tyagi </script>
Producción:
4 5 3 6 2 7 1
Complejidad de tiempo : O (N * logN), ya que estamos usando una función de clasificación.
Espacio auxiliar : O(N), ya que estamos usando espacio extra.
Consulte el artículo completo sobre Reorganizar array de manera que arr[i] >= arr[j] si i es par y arr[i]<=arr[j] si i es impar yj <i para obtener más detalles.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA