Aprenda rapidamente algoritmos de classificação clássicos (implementados por javaScript)

O que você pode aprender?

① Complexidade de tempo ② Complexidade de espaço ③ O que é estabilidade de algoritmo ④ Idéias e implementação de código de cinco algoritmos clássicos

Algoritmo de classificação de aprendizagem (implementado por código js)

Os algoritmos de classificação são muito comuns no trabalho e no estudo. Hoje, o js principal implementa classificação por bolha, classificação por inserção, classificação por seleção, classificação por mesclagem e classificação rápida.
Nota:
① A complexidade do espaço geralmente se refere à complexidade do espaço extra.
② Estabilidade do algoritmo: Suponha que haja vários registros com a mesma chave na sequência de registros a serem classificados. Se classificados, a ordem relativa desses registros permanece inalterada. O algoritmo é dito ser estável.

Tipo de bolha

Complexidade de tempo médio: O (n2) Complexidade do espaço O (1) Muito estável

function bubbleSort(arr){
    
    
for (let i = 0; i < arr.length; i++) {
    
    
    for (let j = arr.length; j > i; j--) {
    
    
        
        if(arr[j]<arr[j-1]){
    
    
            //两值互换
            arr[j]=arr[j]^arr[j-1]
            arr[j-1]=arr[j-1]^arr[j]
            arr[j]=arr[j]^arr[j-1]
        }
    }
}
return arr
}

Auto-sentimento: compreensão simples, alta complexidade de tempo

Classificação de inserção

Complexidade de tempo médio: O (n2) Complexidade do espaço O (1) Muito estável

function insertSort(arr){
    
    
for (let index = 1; i < arr.length; index++) {
    
    
    for (let i = index-1; i >=0&&arr[i]>arr[i+1]; i--) {
    
    
        arr[i] = arr[i]^arr[j]
        arr[j] = arr[i]^arr[j]
        arr[i] = arr[i]^arr[j]
    }
}
return arr
}

Auto-sentimento: compreensão simples, alta complexidade, você pode se referir ao processo de classificação de cartas de jogar

Selecione a classificação

Complexidade de tempo médio: O (n2) Complexidade do espaço O (1) Instável

function selectSort(arr){
    
    
    for (let  i= 0; i < arr.length-1; i++) {
    
    
        let min = i
        for(let j = i+1;j<arr.length;j++){
    
    
            if(arr[j]<arr[min]){
    
     
                min = j
            }
        }
        arr[i] = arr[i]^arr[min]
        arr[min]= arr[min]^arr[i]
        arr[i] = arr[i]^arr[min]
        
    }
    return arr
}

Auto-sentimento: cada vez que você completa um ciclo, você encontrará um mínimo relativo

Mesclar classificação

Complexidade de tempo médio: O (nlog2n) A complexidade do espaço O (n) é muito estável

function mergeSort(arr,l,r){
    
    
  if(l == r){
    
    
      return [arr[l]]
  }
  let mid = parseInt((l+r)/2)
  let arrleft = mergeSort(arr,l,mid)
  let arrRight = mergeSort(arr,mid+1,r)
  return merge(arrleft,arrRight)
}
function merge(arrleft,arrRight){
    
    
let i = 0
let j = 0
let temp =[]
while(i<arrleft.length||j<arrRight.length){
    
    
if(arrleft[i]<arrRight[j]||j>=arrRight.length){
    
    
    temp.push(arrleft[i])
    i++
}else if(arrleft[i]>=arrRight[j]||i>=arrleft.length){
    
    
    temp.push(arrRight[j])
    j++
}
}
return temp
}

Auto-sentimento: primeiro divida a matriz continuamente, divida-a na menor unidade e depois mescle (classifique ao mesclar). Use "ponteiros duplos" para adicionar à nova matriz por comparação.

Ordenação rápida

Complexidade de tempo médio: O (nlog2n) Complexidade do espaço O (nlog2n) instável

function quickSort(arr,l,r){
    
    
    if(l==r){
    
    
        return;
    }
    let i = l
    let j = r
    let key = i
    while(i<j){
    
    
        while(i<j&&arr[i]<arr[key]){
    
    
        i++
        }
        while(i<j&&arr[j]>=arr[key]){
    
    
        j--
        }
        if(i!=j){
    
    
            arr[i] = arr[i]^arr[j]
            arr[j] = arr[j]^arr[i]
            arr[i] = arr[i]^arr[j]
        i++;
        j--
        }
    }
quickSort(arr,l,i)
quickSort(arr,j+1,r)
}
//简单测试
let arr1 = [8,2,6,3,4,7,9]
quickSort(arr1,0,arr1.length-1)
console.log(arr1)

Auto-sentimento: a classificação rápida é baseada em um determinado valor da matriz, classificação e, em seguida, recursivamente para a menor unidade, a ordem sairá naturalmente

Endereço de download do código

Tem que fazer isso sozinho

obrigado

Se você acha que é útil para o seu trabalho de estudo, por favor, compartilhe com quem precisa, ou goste e incentive, obrigado pelo
seu apoio. Você pode adicionar um favorito, e eu continuarei a atualizá-lo. . .

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/XINpxXIN/article/details/104541770
Recomendado
Clasificación