Clasificación de matrices JS (burbuja, rápido, insertar)

1. Clasificación de burbujas

Compare dos elementos adyacentes en la matriz, mueva el número más grande (menor) al final (inicio) de la matriz a través de la comparación por pares, ejecute un ciclo interno para determinar un número máximo (mínimo) y la capa externa Bucle desde el final (inicio) de la matriz hasta el principio (final)
Inserte la descripción de la imagen aquí

function MaoPaoSort(arr){
    
    
        for(var i = 0;i<arr.length-1;i++) {
    
    
            for(var j = 0;j<arr.length-i-1;j++){
    
    
                if(arr[j]>arr[j+1]){
    
    
                    //把大的数字放到后面
                    var str = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = str;
                }
            }
        }
    }
    var arr = [3,5,1,2,7,8,4,5,3,4];
    //console.log(arr);[3,5,1,2,7,8,4,5,3,4];
    MaoPaoSort(arr);
    //console.log(arr);[1, 2, 3, 3, 4, 4, 5, 5, 7, 8]


2. Método de clasificación por inserción (cortar la cola)

Divida la matriz a ordenar en dos partes e inserte el elemento con el índice más pequeño de la última parte en la posición apropiada de la primera parte cada vez
Inserte la descripción de la imagen aquí

  • A partir del primer elemento, se puede considerar que el elemento ha sido ordenado;
  • Saque el siguiente elemento y escanee de atrás hacia adelante en la secuencia ordenada de elementos;
  • Si el elemento (ordenado) es más grande que el nuevo elemento, mueva el elemento a la siguiente posición;
  • Repita el paso 3 hasta que encuentre la posición donde el elemento ordenado es menor o igual que el nuevo elemento;
  • Después de insertar el nuevo elemento en esta posición;
  • Repita los pasos 2 ~ 5.
function InsertSort(arr) {
    
    
  let len = arr.length;
  let preIndex, current;
  for (let i = 1; i < len; i++) {
    
    
    preIndex = i - 1;
    current = arr[i];
    while (preIndex >= 0 && current < arr[preIndex]) {
    
    
      arr[preIndex + 1] = arr[preIndex];
      preIndex--;
    }
    arr[preIndex + 1] = current;
  }
  return arr;
}
 
 
var arr = [3,5,7,1,4,56,12,78,25,0,9,8,42,37];
InsertSort(arr);


3. Clasificación rápida

Después de leer las cosas anteriores, no sé si ha descubierto que si la cantidad de datos es demasiado grande y la matriz es más complicada en el trabajo real, dos recorridos traerán problemas de rendimiento al mismo tiempo. No se asuste, todavía podemos usar Método de clasificación rápido para resolver,快速排序对冒泡排序的一种改进

La idea de la realización es que el problema de clasificación de una matriz se considera como el problema de clasificación de dos matrices pequeñas, con un número como punto de referencia (el número en el medio), el más pequeño que el punto de referencia se coloca a la izquierda y el más grande que el punto de referencia se coloca a la derecha, y cada Una matriz pequeña puede seguir considerándose como dos matrices más pequeñas, de forma recursiva, hasta que el tamaño máximo de la matriz sea 2

function quickSort(arr){
    
    
   //如果数组长度小于1,没必要排序,直接返回
   if(arr.length<=1) return arr;
   //pivot 基准索引,长度的一半
   let pivotIndex = Math.floor(arr.length/2);//奇数项向下取整
   //找到基准,把基准项从原数组删除
   let pivot = arr.splice(pivotIndex,1)[0];
   //定义左右数组
   let left = [];
   let right = [];
   //把比基准小的放left,大的放right
   arr.forEach(element => {
    
    
       if(element<pivot){
    
    
           left.push(element)
       }else{
    
    
           right.push(element)
       }
   });
   return quickSort(left).concat([pivot],quickSort(right))
}
     
     
var arr=[4,56,3,67,44,5,66];
console.log(quickSort(arr));//[3, 4, 5, 44, 56, 66, 67]

Supongo que te gusta

Origin blog.csdn.net/zxlong020/article/details/108531423
Recomendado
Clasificación