¿Puedo obtener el algoritmo para un enfoque iterativo en una búsqueda binaria de doble pivote?

Una búsqueda binaria de doble pivote divide una matriz ordenada en 3 sub-matrices en lugar de 2 y ceros en la sub-matriz que puede contener el elemento que está buscando.

Esto da como resultado menos iteraciones ([matemática] \ log_3 n [/ matemática] en lugar de [matemática] \ log_2 n [/ matemática]) pero más comparaciones por iteración, por lo que no hay mucho (si es que hay) que ganar con este enfoque.

Aquí está el pseudocódigo de una versión iterativa:

  Función dualPivotBinarySearch (array, k, n)
    lo = 0
    hi = n-1 // Límites de la matriz
    MIENTRAS lo <= hola
       p = lo + (hi - lo) / 3
       q = lo + 2 * (hola - lo) / 3
       SI k <matriz [p] ENTONCES
          hola = p-1
       ELSEIF k = matriz [p] ENTONCES
          volver p
       ELSEIF k <matriz [q] ENTONCES
          lo = p + 1
          hola = q-1
       ELSEIF k = matriz [q] ENTONCES
          volver q
       MÁS
          lo = q + 1
       TERMINARA SI
    Mientras tanto
    volver -1
 FUNCION FINAL