Tipo de bolha
O princípio da bolha é fazer o maior elemento ou o menor elemento "flutuar"
Inserir classificar, selecionar classificar, classificar rápido, classificar bolhas são todos classificados de comparação
Idéias
Compare os dois números adjacentes, um por um, coloque os decimais na frente e os grandes números na parte de trás.
Etapa 1: Compare o primeiro e o segundo número, coloque o decimal antes e o grande número depois. Compare o segundo número e o terceiro número, coloque o decimal antes e depois do grande número, continue assim até que os dois últimos números sejam comparados, coloque o decimal antes e depois do grande número.
Etapa2: Na segunda viagem: ainda começa no primeiro logaritmo (porque pode ser devido à troca do segundo número e ao terceiro número, o primeiro número não é mais menor que o segundo número), coloque o decimal antes e depois de colocar o grande número, comparar até o penúltimo número (a primeira posição já é a maior posição na penúltima posição). No final da segunda viagem, um novo número máximo é obtido na penúltima posição (na verdade, o segundo maior número em toda a sequência).
Se isso continuar, repita o processo acima até que a classificação seja finalmente concluída.
Como os decimais são sempre colocados para a frente e grandes números são colocados para trás durante o processo de classificação, o que é equivalente ao aumento de bolhas, é chamado de classificação de bolhas.
Efeito de animação de classificação de bolhas
Implementação: este código é relativamente simples e é o código mais básico e básico no algoritmo. . .
Três coisas para observar
1. O método de troca de classes pode ser resolvido em JavaScript com a = [b, b = a] [0].
substituir
A cópia do código é a seguinte:
var, a, b, temp
temp = a;
a = b;
b = temp
Este método de troca
2. Preste atenção ao cache das variáveis de loop, onde o Array.Length está em cache
3. Preste atenção ao loop incorporado, que deve comparar do primeiro número ao último número, e n é o número da etapa de comparação
função bubblesort (array) {var l = array.length; for (var i = 0; i <l; i ++) {// O número de etapas comparadas é o comprimento da matriz para (var j = 0; j <li; j ++) {// o número de trocas inline é comparado do primeiro número (li; {Array [j] = [Array [J - 1], Array [J - 1] = Array [J]] [0] // Swap Elements aqui}} para (var k = 0; k <l; k ++) {console.log (Array [K]+","); [6,54,6,22,5,7,2,2,34]; Bubblesort (A);Efeito de animação
Classificação de inserção
É muito simples, são as etapas para tocarmos e inserirmos cartões!
Ideias:
1 Primeiro, digamos que tocamos um cartão e todas as cartas em nossas mãos estão definidas para esvaziar = [] tocaram um push (arr [0])
2 Retire o próximo cartão, defina -o como, digitalize de volta para frente em todos os nossos cartões vazios (já classificados)
3 Se o cartão na sua mão estiver vazio [empty.lengthy-n] (classificado) for maior que o novo elemento, mova a placa para a próxima posição (espaço de liberação) vazio [vazio.
4 repeat Etapa 3 até que a carta classificada vazia [vazio.lengthen-n] seja menor ou igual a um
5 Insira A nesta posição vazia [empty.lengthen n] = a
6 Repita a etapa 2
No entanto, o código JavaScript ainda é um pouco difícil de implementar, o código é o seguinte:
function insert (arr) {var l = arr.length; var vazio = []; // Matriz vazia, indicando nossa mão em vazio.push (arr [0]); // Vamos tocar em uma imagem primeiro para (var i = 1; i <l; i ++) {// Observe que o ponto de partida aqui é 1 porque temos um tocado! if (arr [i]> empty [empty.length - 1]) {empty [empty.lengthy] = arr [i]} // Se for maior que a matriz ordenada vazia, coloque -o diretamente no final para (var j = email.length; j> 0 && ARR [i] <vazio [j - j--) {// compare de máximo. Quando arr <um certo pedaço de uma matriz ordenada, não há necessidade de movê -la. vazio [j] = vazio [j - 1]; // mova -se vazio [j - 1] = arr [i]; // coloque o valor na posição vazia} // console.log (vazio)} retorna vazio}Então, o ponto de conhecimento mais importante aqui é o símbolo && que significa "e", ou seja, as condições de ambos os lados devem ser atendidas antes que a expressão seja estabelecida.
O símbolo && também pode substituir se, por exemplo, se (a) {fun ()} for igual a a && b
Outro ponto muito importante
Supondo que a matriz seja ARR, seu "último item" é arr [arr.length-1].
Classificar animação
Classificação de seleção
É também um algoritmo de classificação simples.
Ideias:
Encontre o menor elemento - jogue -o na matriz - encontre o pequeno novamente - jogue -o na matriz e assim por diante.
Primeiro, encontre o menor elemento na matriz não classificada. O método que você encontra pode usar os meios de julgamento e atribuição contínuos, ou seja:: deixe a primeira matriz de elementos [0] da matriz seja o menor elemento, então o número de sequência do "elemento mínimo" na matriz é 0.
Em seguida, itera sobre a matriz. Se o segundo elemento da matriz for menor que isso, o segundo elemento é o menor elemento e a atualização "0" para "1".
Após a travessia, sabemos que o subscrito do menor elemento desta série é "n"; É retirado e armazenado na posição inicial da sequência de classificação (Array [n])
Em seguida, continue procurando o menor elemento dos elementos não classificados restantes e, em seguida, coloque -o no final da sequência classificada. Observe que o subscrito da Traversal começa de 1 neste momento. Porque já escolhemos um menor elemento.
E assim por diante até que todos os elementos sejam classificados.
função selectSort (array) {var min; var l = array.length; // comprimento em cache para (var i = 0; i <l; i ++) {// loop inicial, loop 1 vezes no total e você pode encontrar l elementos min = i; // supor o primeiro elemento menor para (var j = i+1; (Array [min]> Array [j]) // julga se o subsequente min = j; // atualiza o subscrito "mínimo"} if (min! = i) {// porque aqui, porque está operando na mesma matriz, você pode trocar diretamente elementos. Por exemplo, o primeiro item da matriz é eu, então descobri que o menor elemento é a matriz [min], então preciso trocar este min com i. E assim por diante. Array [i] = [Array [min], Array [min] = Array [i]] [0]; // Swap Elements}} Return Array;}O que ainda é observado aqui é o método de escrita de Exchange Array [i] = [Array [min], Array [min] = Array [i]] [0]
É fácil trocar matriz [i] e matriz [min] ~
Classificar animação
Classificação rápida
Atualmente, a classificação rápida é o algoritmo de classificação mais poderoso, que aproveita a idéia de recursão.
Idéias
Escolher um elemento da matriz é chamado de "benchmark". Isso pode ser selecionado diretamente usando o comprimento/2
Itreate através da matriz, todos os elementos com menor que o valor de referência são colocados na frente da referência, e todos os elementos com maior que o valor de referência são colocados atrás da referência (o mesmo número pode ser usado para ambos os lados). Em termos leigos, o homem fica à esquerda e a mulher fica à direita. .
Em seguida, obtemos uma matriz = Array Larray composto por peças menores que o Rarray de Benchmark + Array composto por peças maiores que a referência.
Então precisamos apenas "o mesmo" processo Larray e Rarray ~
Isso requer o uso da redação de recursão. Após o processamento, Larray é dividido na referência de Larray, que é menor que a referência de Larray e maior que a referência de Larray. .
Então continuamos fazendo as coisas, o homem fica à esquerda e a mulher fica à direita. .
Até descobrirmos que o comprimento de Larray se tornou 1, o que não é suficiente para ser dividido novamente, achamos que a classificação acabou.
função Quicksort (arr) {var L = arr.length; // Comprimento da matriz em cache se (arr.Length <= 1) {return arr}; // Se o comprimento de Larray e Rarray que obtemos forem menores que 1, não há necessidade de alinhar ~ var num = Math.floor (arr.length/2); // escolha o número no meio da matriz. Observe que o comprimento/2 não é necessariamente um número inteiro. Use Math.Floor para redondamente var numValue = arr.splice (num, 1) [0]; // Use o método de emenda para levar um elemento, preste atenção ao sintaxe var esquerdo = []; // Crie o contêiner de referência esquerdo var dire Right = []; // Crie o contêiner de referência direita para (var i = 0; i <; i += 1); esquerda.push (arr [i]): direito.push (arr [i]); // o homem fica à esquerda e a mulher fica à direita. . } Retorne o QuickSort (esquerda) .CONCAT ([NUMVALUE], QuickSort (direita)) // Recursivamente, continue operando nas matrizes esquerda e direita. }Efeito de animação:
Observe aqui que, embora Arr.splice (num, 1) desenha apenas um número, o resultado da emenda também é uma matriz, que requer [0], caso contrário, o resultado será estranhamente um monte de matrizes de matrizes (1). . .
referência em splice: //www.vevb.com/w3school/js/jsref_splice.htm
Math.floor é uma referência para objetos de matemática //www.vevb.com/w3school/js/js_obj_math.htm
O que é recursão: http://baike.baidu.com/view/96473.htm
Além da classificação rápida, os quatro algoritmos acima são todos algoritmos simples de classificação, e esses quatro algoritmos são frequentemente levados em entrevistas ~
Ainda é importante enfatizar aqui que o algoritmo acima usa muitos conhecimentos relevantes sobre loops e matrizes, para que você deve memorizá -lo!