Burbuja
El principio de la burbuja es hacer el elemento más grande o el elemento más pequeño "flotar"
Insertar el orden, seleccionar clasificación, clasificación rápida, clasificación de burbujas son todo comparación.
Ideas
Compare los dos números adyacentes uno por uno, coloque los decimales delante y los grandes números en la parte posterior.
Paso 1: Compare el primer y segundo número, coloque el decimal antes y el gran número después. Compare el segundo número y el tercer número, coloque el decimal antes y después del gran número, continúe así hasta que se comparan los dos últimos números, coloque el decimal antes y después del gran número.
Paso 2: En el segundo viaje: aún así, comience desde el primer logaritmo (debido a que puede deberse al intercambio del segundo número y al tercer número, el primer número ya no es menor que el segundo número), coloque el decimal antes y después de poner el gran número, compare hasta el número penetrante (la primera posición ya es la más grande en la posición penultiva). Al final del segundo viaje, se obtiene un nuevo número máximo en la posición penúltima (en realidad, el segundo número más grande en toda la secuencia).
Si esto continúa, repita el proceso anterior hasta que finalmente se complete la clasificación.
Dado que los decimales siempre se colocan hacia adelante y se colocan grandes números hacia atrás durante el proceso de clasificación, que es equivalente al aumento de las burbujas, se llama clasificación de burbujas.
Efecto de animación de clasificación de burbujas
Implementación: este código es relativamente simple y es el código más básico y básico en el algoritmo. . .
Tres cosas a tener en cuenta
1. El método de intercambio de clases se puede resolver en JavaScript con a = [b, b = a] [0].
reemplazar
La copia del código es la siguiente:
Var, A, B, temperatura
temp = a;
a = b;
B = temperatura
Este método de intercambio
2. Presta atención al caché de las variables de bucle, donde la matriz. La longitud se almacena en caché
3. Preste atención al bucle integrado, que se comparará desde el primer número hasta el enésimo último número, y N es el número de paso de comparación
function bubblesort (array) {var l = array.length; for (var i = 0; i <l; i ++) {// El número de pasos comparados es la longitud de la matriz para (var j = 0; j <li; j ++) {// el número de intercambios en línea se compara desde el primer número con la longitud de los números de último -n, n es el paso de comparación si (el matrimonio J] en línea se compara desde la primera longitud con la longitud total de los últimos números, n es el paso de comparación si (el matrimonio J] se compara desde la primera longitud. {array [j] = [array [j - 1], array [j - 1] = array [j]] [0] // Elementos de intercambio aquí}} para (var k = 0; k <l; k ++) {console.log (array [k]+",");} console.log ('esto es el'+(i+1)+'orden')}}}}}}} [6,54,6,22,5,7,8,2,34]; Bubblesort (a);Efecto de animación
Clasificación de inserción
Es muy simple, ¡son los pasos para que toquemos e insertamos tarjetas!
Ideas:
1 Primero, digamos que tocamos una tarjeta, y todas las cartas en nuestras manos están configuradas para vaciar = [] tocaron un empuje (arr [0])
2 Saque la siguiente tarjeta, ajusta a A, escanee de regreso a delante en todas nuestras tarjetas vacías (ya ordenadas)
3 Si la tarjeta en su mano está vacía [vacía.length-n] (ordenado) es mayor que el nuevo elemento, mueva la tarjeta a la siguiente posición (espacio de liberación) vacía [vacía.length-n] = vacía [vacía.length-n+1]
4 Paso 3
5 Inserte a en esta posición vacía [vacía.length-n] = a
6 Repita el paso 2
Sin embargo, el código JavaScript sigue siendo un poco difícil de implementar, el código es el siguiente:
function insert (arr) {var l = arr.length; var vacía = []; // matriz vacía, indicando nuestra mano vacía.push (arr [0]); // tocamos una imagen primero para (var i = 1; i <l; i ++) {// Tenga en cuenta que el punto de partida aquí es 1, ¡porque hemos tocado uno! if (arr [i]> vacía [vacía.length - 1]) {vacía [vacío Cuando se arr <cierto de una matriz ordenada, no hay necesidad de moverla. vacío [j] = vacío [j - 1]; // moverse vacío [j - 1] = arr [i]; // Pon el valor en la posición vacía} // console.log (vacía)} return vacía}Entonces, el punto de conocimiento más importante aquí es el símbolo &&, que significa "y", es decir, las condiciones en ambos lados deben cumplirse antes de establecer la expresión.
El símbolo && también puede reemplazar si, por ejemplo, si (a) {diversión ()} es igual a a && b
Otro punto muy importante
Suponiendo que la matriz es ARR, entonces su "último elemento" es ARR [arr.length-1].
Ordenar animación
Clasificación de selección
También es un algoritmo de clasificación simple.
Ideas:
Encuentre el elemento más pequeño, tírelo a la matriz, encuentre el pequeño nuevamente, tírelo a la matriz, y así sucesivamente.
Primero, encuentre el elemento más pequeño en la matriz sin clasificar. El método que encuentre puede usar los medios de juicio y asignación continuos, es decir, de que la matriz del primer elemento [0] de la matriz sea el elemento más pequeño, entonces el número de secuencia del "elemento mínimo" en la matriz es 0.
Luego iterar sobre la matriz. Si el segundo elemento de la matriz es más pequeño que eso, entonces el segundo elemento es el elemento más pequeño y actualiza "0" a "1".
Después de atravesar, sabemos que el subíndice del elemento más pequeño de esta serie es "n"; Se saca y almacena en la posición inicial de la secuencia de clasificación (Array [N])
Luego, continúe buscando el elemento más pequeño de los elementos restantes sin clasificar, y luego colóquelo al final de la secuencia ordenada. Tenga en cuenta que el subíndice del recorrido comienza desde 1 en este momento. Porque ya hemos elegido un elemento más pequeño.
Y así sucesivamente hasta que se clasifiquen todos los elementos.
function selectSort(array) {var min;var l = array.length;//Cached length for (var i = 0; i < l; i++) {//Start loop, loop 1 times in total, and you can find l elements min = i;//Suppose the first one is the smallest element for (var j = i + 1; j < l; j++) {//Start loop from the first one, traverse if (array[min] > Array [j]) // juzga si el subsiguiente min = j; // actualiza el subíndice "mínimo"} if (min! = i) {// porque aquí, porque está operando en la misma matriz, puede intercambiar elementos directamente. Por ejemplo, el primer elemento de la matriz es I, luego descubrí que el elemento más pequeño es la matriz [min], por lo que necesito intercambiar este min con i. Etcétera. array [i] = [array [min], array [min] = array [i]] [0]; // swap elements}} return array;}Lo que todavía se observa aquí es el método de escritura de la matriz de intercambio [i] = [matriz [min], matriz [min] = array [i]] [0]
Es fácil intercambiar matriz [i] y matriz [min] ~
Ordenar animación
Clasificación rápida
Quick Sort es el algoritmo de clasificación más poderoso en la actualidad, que aprovecha la idea de la recursión.
Ideas
Elegir un elemento de la matriz se llama "punto de referencia". Esto se puede seleccionar directamente usando longitud/2
Iterar a través de la matriz, todos los elementos con más pequeños que el valor de referencia se colocan frente a la referencia, y todos los elementos con mayor que el valor de referencia se colocan detrás de la referencia (el mismo número se puede usar a cualquiera de los dos lados). En términos de laicos, el hombre se para a la izquierda y la mujer se para a la derecha. .
Luego obtenemos una matriz de matriz = larray de matriz compuesta de piezas más pequeñas que el punto de referencia + matriz rarray compuesta de piezas más grandes que el punto de referencia.
Entonces solo necesitamos "el mismo" proceso Larray y Rarray ~
Esto requiere el uso de la escritura de recursión. Después del procesamiento, Larray se divide en el punto de referencia de Larray, que es más pequeño que el punto de referencia de Larray y más grande que el punto de referencia de Larray. .
Luego seguimos haciendo cosas, el hombre se para a la izquierda y la mujer se para a la derecha. .
Hasta que descubramos que la longitud de Larray se ha convertido en 1, lo que no es suficiente para dividirse nuevamente, creemos que la clasificación ha terminado.
función Quicksort (arr) {var l = arr.length; // longitud de la matriz en caché if (arr.length <= 1) {return arr}; // Si la longitud de larray y rarray que obtenemos son más pequeñas que 1, entonces no hay necesidad de alinearse ~ var num = math.floor (arr.length/2); // elige el número en el medio de la matriz. Tenga en cuenta que la longitud/2 no es necesariamente un entero. Use Math.floor a redondear var numvalue = arr.splice (num, 1) [0]; // Use el método de empalme para tomar un elemento, preste atención a la sintaxis var con izquierda = []; // Cree el contenedor de referencia de la izquierda var right = []; // Crear el contenedor de referencia derecho para (var i = 0; i <l; i += 1) {// inicio de inicio de la derecha en el arrendamiento de la matriz Left.push (arr [i]): derecho.push (arr [i]); // El hombre se para a la izquierda y la mujer se para a la derecha. . } return Quicksort (izquierda) .concat ([numvalue], Quicksort (derecha)) // recursivamente, continúe operando en las matrices izquierda y derecha. }Efecto de animación:
Tenga en cuenta aquí que aunque arr.splice (num, 1) solo dibuja un número, el resultado del empalme también es una matriz, que requiere [0], de lo contrario el resultado será extrañamente un montón de matrices de matrices (1). . .
referencia de empalme: //www.vevb.com/w3school/js/jsref_splice.htm
Math.floor es una referencia para objetos matemáticos //www.vevb.com/w3school/js/js_obj_math.htm
¿Qué es la recursión? Http://baike.baidu.com/view/96473.htm
Además de la clasificación rápida, los cuatro algoritmos anteriores son algoritmos de clasificación simples, y estos cuatro algoritmos se toman con mucha frecuencia durante las entrevistas ~
Todavía es importante enfatizar aquí que el algoritmo anterior utiliza muchos conocimientos relevantes sobre bucles y matrices, ¡por lo que debe memorizarlo!