¿Cuál es la forma eficiente de insertar un número en una array ordenada de números en JavaScript?

Dada una array de números y la tarea es insertar un número en la array ordenada usando JavaScript. Hay muchos enfoques para resolver este problema, dos de ellos se dan a continuación:

Enfoque 1:

  • Primero tome los valores en una variable (vamos a arr).
  • Asegúrate de que esté ordenado.
  • En este ejemplo, la complejidad es O(n), donde n es el número de elementos disponibles en la array.
  • El método findLoc busca el elemento justo mayor que el elemento que queremos insertar.
  • El método devuelve el índice de la ubicación.
  • realice la operación de inserción usando el método .splice() .

Ejemplo: Este ejemplo ilustra el enfoque discutido anteriormente.

<!DOCTYPE HTML>
<html>
  
<head>
</head>
  
<body style="text-align:center;" id="body">
    <h1 style="color:green;"> 
      GeeksforGeeks 
    </h1>
    <p id="GFG_UP" 
       style="font-size: 15px; font-weight: bold;">
    </p>
    <button onclick="gfg_Run()">
        Insert
    </button>
    <p id="GFG_DOWN" 
       style="color:green; font-size: 20px; font-weight: bold;">
    </p>
    <script>
        var el_up = document.getElementById("GFG_UP");
        var el_down = document.getElementById("GFG_DOWN");
        var today = new Date();
        var arr = [1, 2, 4, 6, 9];
        el_up.innerHTML = "Click on the button to insert a number "+
                       "in javascript array.<br> Array is = " + arr;
  
        function add(el, arr) {
            arr.splice(findLoc(el, arr) + 1, 0, el);
            return arr;
        }
  
        function findLoc(el, arr, st, en) {
            st = st || 0;
            en = en || arr.length;
            for (i = 0; i < arr.length; i++) {
                if (arr[i] > el)
                    return i - 1;
            }
            return en;
        }
  
        function gfg_Run() {
            add(7, arr);
            el_down.innerHTML = "Array becomes " + arr;
        }
    </script>
</body>
  
</html>

Producción:

  • Antes de hacer clic en el botón:
  • Después de hacer clic en el botón:

Enfoque 2:

  • En este ejemplo, la complejidad es O(Logn), donde n es el número de elementos de la array.
  • Un método findLoc está buscando la ubicación donde debería estar presente el elemento.
  • El método devuelve el índice de la ubicación mediante el uso de un algoritmo de búsqueda binaria .
  • realice la operación de inserción usando el método .splice() .

Ejemplo: Este ejemplo ilustra el enfoque discutido anteriormente.

<!DOCTYPE HTML>
<html>
  
<head>
</head>
  
<body style="text-align:center;" id="body">
    <h1 style="color:green;">  
      GeeksforGeeks  
    </h1>
    <p id="GFG_UP" 
       style="font-size: 15px; font-weight: bold;">
    </p>
    <button onclick="gfg_Run()">
        Insert
    </button>
    <p id="GFG_DOWN" 
       style="color:green; font-size: 20px; font-weight: bold;">
    </p>
    <script>
        var el_up = document.getElementById("GFG_UP");
        var el_down = document.getElementById("GFG_DOWN");
        var today = new Date();
        var arr = [1, 2, 4, 6, 9];
        el_up.innerHTML = "Click on the button to insert a "+
          "number in javascript array.<br> Array is = " + arr;
  
        function add(el, arr) {
            arr.splice(findLoc(el, arr) + 1, 0, el);
            return arr;
        }
  
        function findLoc(el, arr, st, en) {
            st = st || 0;
            en = en || arr.length;
            var pivot = parseInt(st + (en - st) / 2, 10);
            if (en - st <= 1 || arr[pivot] === el) return pivot;
            if (arr[pivot] < el) {
                return findLoc(el, arr, pivot, en);
            } else {
                return findLoc(el, arr, st, pivot);
            }
        }
  
        function gfg_Run() {
            add(5, arr);
            el_down.innerHTML = "Array becomes " + arr;
        }
    </script>
</body>
  
</html>

Producción:

  • Antes de hacer clic en el botón:
  • Después de hacer clic en el botón:

Publicación traducida automáticamente

Artículo escrito por PranchalKatiyar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *