de nickf no es la mejor manera de hacer esto. En el peor de los casos, el algoritmo de nickf hace 2 comparaciones por número, para un total de 2n - 2.
Podemos hacerlo un poco mejor. Cuando comparas dos elementos a y b, si a> b sabemos que a no es el mínimo, yb no es el máximo. De esta manera usamos toda la información disponible para eliminar tantos elementos como podamos. Por simplicidad, supongamos que tenemos un número par de elementos.
romperlos en pares: (a1, a2), (a3, a4), etc.
Compárelos, rompiéndolas en un conjunto de ganadores y perdedores - esto se lleva a n/2 compara, que nos da dos juegos de tamaño n/2. Ahora encuentra el máximo de los ganadores y el mínimo de los perdedores.
Desde arriba, encontrar el mínimo o el máximo de n elementos toma n-1 compara. Por lo tanto, el tiempo de ejecución es: n/2 (para las comparaciones iniciales) + n/2 - 1 (máximo de ganadores) + n/2 - 1 (mínimo de perdedores) = n/2 + n/2 + n/2 -2 = 3n/2 - 2. Si n es impar, tenemos un elemento más en cada uno de los conjuntos, por lo que el tiempo de ejecución será 3n/2
De hecho, podemos demostrar que este es el más rápido este problema puede ser posiblemente resuelto por cualquier algoritmo.
Un ejemplo:
Supongamos que nuestro matriz es 1, 5, 2, 3, 1, 8, 4 Divide en pares: (1,5), (2,3) (1,8), (4, -). Comparar. Los ganadores son: (5, 3, 8, 4). Los perdedores son (1, 2, 1, 4).
Escaneo de los ganadores da 8. Comprobar que los perdedores da 1.
Inicializando con el primer elemento, ya no le importan los límites de su tipo de datos. – Mnebuerquo
Inicializando usando el primer elemento, asume que hay uno. (la secuencia podría estar vacía. –
está bien. En javascript, obtendrá bajo = indefinido, y alto = indefinido ... tiene más sentido que el infinito negativo ... – nickf