Red de conocimiento informático - Material del sitio web - Cómo describir un algoritmo de búsqueda binaria en C++

Cómo describir un algoritmo de búsqueda binaria en C++

plantilla

int BinarySearch(Escriba a[],const Type& x,int n)

{

int left=0; >

int derecha=n-1;

mientras(izquierda<=derecha){

int media=(izquierda+derecha)/2

if (x) ==a[medio]) return medio;

if (x>a[medio]) izquierda=medio+1

else right=medio-1;

}

return middle.

return -1

}

La función de plantilla BinarySearch se utiliza en a[0 ] <=a[1]<=... <=a[n-1]***n Busque x entre elementos incrementales, encuentre x y devuelva su posición en la matriz; de lo contrario, devuelva -1. No es difícil ver que cada vez que se ejecuta el ciclo while, el tamaño de la matriz a buscar se reduce a la mitad, por lo que la complejidad temporal en el peor de los casos de todo el algoritmo es O (log n). Cuando la cantidad de datos es muy grande, las ventajas y desventajas de su complejidad temporal en la búsqueda lineal son claras de un vistazo.

Clasificación por selección

El principio básico es: seleccione el i-ésimo registro más pequeño cada vez y colóquelo en la i-ésima posición (i comienza desde 0. De acuerdo con este principio, El décimo registro más pequeño es en realidad el más pequeño, lo cual es un poco distorsionado, pero no importa). Cuando i = N-1, finaliza la clasificación.

Clasificación por selección directa

La ordenación por selección directa simplemente reproduce la idea básica de la ordenación por selección, es decir, el costo de encontrar el elemento más pequeño por primera vez es O (n) Si no realiza un procesamiento especial y utiliza el método más simple para encontrar elementos cada vez, entonces la complejidad temporal de toda la clasificación es naturalmente O (n2).

Método de la burbuja

Para obtener el valor máximo en a[1], combinamos a[1] con los elementos debajo de él, a[2], a[3] , .. para comparar. , a[10] para comparar. Primero compare a [1] y a [2], si a [1]

Para obtener el siguiente valor más grande en a[2], se debe comparar a[2] con los elementos que le siguen, intercambiar a[3], a[4],.... , a[10] para comparar. De esta forma, después de 8 comparaciones, a[2] obtendrá el siguiente valor máximo.

Esto continúa hasta que finalmente se compara a[9] con a[10], el número mayor se coloca en a[9] y el número menor se coloca en a[10], toda la clasificación finaliza aquí.

Como podemos ver en lo anterior, para 10 números, se requieren 9 comparaciones, y cada comparación es un número diferente.

La primera vez requiere 9 comparaciones, la segunda vez requiere 8 comparaciones,…. Comparado por última vez 1 veces.

La clasificación anterior de los elementos de la matriz se logra mediante un bucle doble, con la variable del bucle externo establecida en i y la variable del bucle interno establecida en j. El bucle interior se repite 9, 8, ..., 1 veces. Cada vez que se comparan dos elementos, el primer elemento asociado con el bucle externo i se identifica con a[i], el segundo elemento asociado con el bucle interno j se identifica con a[j] y los valores de i son 1, 2 en secuencia.,....,9, para cada i, el valor de j es i+1,i+2,.....