Clasificación de colinas de clasificación de algoritmos de javascript


Dirección del evento: Desafío de aprendizaje de 21 días de CSDN

prefacio

Muchas personas han oído hablar del algoritmo de clasificación clásico, y muchas personas pueden haberlo usado, pero también hay muchas personas que nunca han oído hablar de él. ¿por qué? Ahora que tenemos más y más marcos y paquetes dependientes, podremos usar la escena real de clasificación y encapsularla en una función como un negocio.Por lo tanto, algunas personas solo conocen la función pero no su lógica operativa.

Con base en lo anterior, para comprender mejor la lógica de operación de la función, resolví algunas reglas de operación del método de clasificación básico, así como algunos conocimientos personales, con la esperanza de brindarle alguna ayuda.

Este artículo describirá la clasificación Hill. Simplemente hablando, la clasificación de Hill consiste en dividir la matriz y clasificarla por separado;

clasificación de colinas

Hill sort es un algoritmo de ordenación rápida basado en la ordenación por inserción, también conocida como ordenación incremental de reducción. La ordenación por inserción simple es lenta para arreglos desordenados grandes porque los elementos solo se pueden mover de un extremo al otro del arreglo poco a poco. Hillsort simplemente mejoró la ordenación por inserción para la velocidad, y fue uno de los primeros algoritmos en romper O(n2).

Principio de implementación de la clasificación Hill

  • Agrupe la matriz de acuerdo con un cierto incremento y use el algoritmo de clasificación de inserción directa para clasificar cada grupo. La distancia sugerida por Hill es N/2, y cada clasificación se divide en dos mitades. Es decir, para una matriz con N =10, el incremento La secuencia espaciadora es 5, 2, 1;
  • Luego reduzca el incremento y continúe agrupando y ordenando; a medida que el incremento disminuye gradualmente, cada grupo contiene más y más palabras clave. Cuando el incremento se reduce a 1, la matriz completa se divide en un grupo y se ordena nuevamente, la matriz completa se puede completar ordenar;

imagen.png

el código


function shellSort(array) {
    
    
  //每次向下得到一半的增量
  for (let gap = Math.floor(array.length / 2); gap > 0; gap = Math.floor(gap / 2)) {
    
    
    //每个分组进行插入排序
    for (let i = gap; i < array.length; i++) {
    
    
      let j = i;
      let tmp = array[j];
      // 如果同一组中 前数大于后数,则交换他们
      if (array[j] < array[j - gap]) {
    
    
        while (j - gap >= 0 && array[j - gap] > tmp) {
    
    
          array[j] = array[j - gap];
          j = j - gap;
        }
        array[j] = tmp;
      }
    }
  }
  console.log('shellSort result', array);
}
shellSort([2, 4, 7, 9, 0, 1, 2, 3, 5, 6, 8]);

valor de retorno
imagen.png

la complejidad

complejidad del tiempo:

  • Mejor caso: la secuencia se organiza en orden positivo, en este caso, la operación de comparación debe realizarse (n-1) veces. La operación de asignación de desplazamiento hacia atrás es 0 veces. eso es O(n)
  • Peor caso: O(nlog2n).
  • Complejidad de tiempo asintótica (complejidad de tiempo promedio): O (nlog2n)

Complejidad espacial: O(2n)

mensaje

Hill sort es el más inestable en general, pero en el mejor de los casos, ¡es un muy buen método de clasificación! Los pros y los contras son igualmente obvios. ¡Usar con precaución!

Supongo que te gusta

Origin blog.csdn.net/Long861774/article/details/126406164
Recomendado
Clasificación