Aprenda rápidamente algoritmos de clasificación clásicos (implementados por javaScript)

¿Qué puedes aprender?

① Complejidad temporal ② Complejidad espacial ③ Qué es la estabilidad del algoritmo ④ Ideas e implementación de código de cinco algoritmos clásicos

Algoritmo de clasificación de aprendizaje (implementado por código js)

Los algoritmos de clasificación son muy comunes en el trabajo y el estudio. Hoy en día, el js principal implementa la clasificación por burbujas, la clasificación por inserción, la clasificación por selección, la clasificación por fusión y la clasificación rápida.
Nota:
① La complejidad del espacio generalmente se refiere a la complejidad del espacio adicional.
② Estabilidad del algoritmo: Suponga que hay varios registros con la misma clave en la secuencia de registros que se van a ordenar. Si se ordena, el orden relativo de estos registros permanece sin cambios. El algoritmo es se dice que es estable.

Ordenamiento de burbuja

Complejidad temporal promedio: O (n2) Complejidad espacial O (1) Muy estable

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
}

Sentimiento de uno mismo: comprensión simple, alta complejidad en el tiempo

Tipo de inserción

Complejidad temporal promedio: O (n2) Complejidad espacial O (1) Muy estable

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
}

Sentimiento propio: comprensión simple, alta complejidad, puede consultar el proceso de clasificación de las cartas

Seleccionar ordenar

Complejidad de tiempo promedio: O (n2) Complejidad espacial O (1) Inestable

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
}

Sentimiento propio: cada vez que completa un ciclo, encontrará un mínimo relativo

Combinar ordenación

Complejidad de tiempo promedio: O (nlog2n) La complejidad del espacio O (n) es muy estable

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
}

Sentimiento propio: primero divida la matriz de forma continua, divídala en la unidad más pequeña y luego fusione (ordene al fusionar). Utilice "punteros duales" para agregar a la nueva matriz en comparación.

Ordenación rápida

Complejidad de tiempo promedio: O (nlog2n) Complejidad espacial O (nlog2n) inestable

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)

Sentimiento propio: la clasificación rápida se basa en un cierto valor de la matriz, ordenando y luego recursivamente a la unidad más pequeña, el orden saldrá naturalmente

Dirección de descarga de código

Tienes que hacerlo tu mismo

agradecer

Si sientes que es útil para tu trabajo de estudio, compártelo con quienes lo necesiten, o dale me gusta y anímalo, gracias por
tu apoyo. Puedes agregar un favorito y continuaré actualizándolo. . .

Inserte la descripción de la imagen aquí

Supongo que te gusta

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