Diagrama de flujo ilustrado de clasificación en zonas montañosas
Los algoritmos de clasificación interna comunes incluyen clasificación por inserción, clasificación Hill, clasificación por selección, clasificación por burbujas, clasificación normalizada, clasificación rápida, clasificación en montón, clasificación por base, etc. El siguiente es el algoritmo de clasificación Hill:
La clasificación Hill, también conocida como algoritmo de clasificación incremental descendente, es una versión más eficiente y mejorada de la clasificación por inserción. Sin embargo, la clasificación Hill es un algoritmo de clasificación inestable.
La ordenación en colina es un método mejorado basado en las siguientes dos características de la ordenación por inserción:
La ordenación por inserción es eficiente cuando se opera con datos casi ordenados, es decir, puede lograr el eficiencia de la clasificación lineal; sin embargo, la clasificación por inserción suele ser ineficiente porque la clasificación por inserción solo puede mover un bit de datos a la vez;
La idea básica de la clasificación Hill es ordenar todo el registro La secuencia es dividido en dos partes. La idea básica de la clasificación Hill es: primero dividir la secuencia completa de registros que se van a clasificar en varias subsecuencias que se insertan directamente en la secuencia de clasificación. Después de que toda la secuencia de registros esté "básicamente ordenada", todos los registros se insertan directamente en la secuencia. secuencia.
1. Pasos del algoritmo
Selecciona una secuencia incremental t1, t2,..., tk, donde ti > tj, tk = 1
Ordena los; secuencias según el número k de secuencias incrementales
Para cada clasificación, según el incremento ti. Según el incremento ti correspondiente, la secuencia a ordenar se divide en varias subsecuencias de longitud m, y la ordenación por inserción directa se realiza en cada subtabla respectivamente. Solo cuando el factor de incremento es 1 se considera que toda la secuencia es una tabla, y la longitud de la tabla es la longitud de toda la secuencia.
2. Animación
Implementación de código JavaScript función de ejemplo shellSort ( arr ) {
var len = arr length ,
temp ,
brecha = 1 ;
mientras ( brecha 0 ; brecha = Matemáticas .{
for ( var i = brecha ; i = 0 && arr [ j ] > temp ; j -= espacio ) {
arr [ j + espacio ] = arr [ j ]
}
arr [ j + espacio ] =; temp ;
}
}
Devolver arr
}
Ejemplo de Python def shellSort ( arr ) :
importar matemáticas
brecha = 1
mientras ( brecha 0 :
para i en rango ( brecha , len ( arr ) ):
temp = arr [ i ]
j = i-gap
mientras j >= 0 y arr [ j ] > temp:
arr [ j+espacio ] = arr [ j ]
j- = espacio
arr [ j+espacio ] = temporal
espacio = math .floor ( gap/ 3 )
return arr
Ir ejemplo func shellSort ( arr [] int ) [] int {
length := len ( arr )
espacio := 1
para espacio < largo / 3 {
espacio = espacio * 3 + 1
}
para espacio > 0 {
para i := espacio ; i < longitud ++ {
temp := arr [ i ]
j := i - espacio
for j > = 0 & amp;& arr [ j ] > temp {
arr [ j + espacio ] = arr [ j ]
j -= brecha
}
arr [ j + brecha ] = temp
}
brecha = brecha / 3
}
Devolver arr
}
Ejemplo de Java public static void shellSort ( int [ ] arr ) {
int longitud = arreglo.
int temp ;
for ( int paso = longitud / 2 ; paso >= 1 ; paso /= 2 ) { p>
for ( int i = paso ; i = 0 && arr [ j ] > temp ) {
arr [ j +
paso ] = arr [ j ]
j -= paso
}
arr [ j + paso ] = temp
}
}
}
}
Función de ejemplo PHP shellSort ( $arr )
{
$len = recuento ( $arr )
$temp = 0
$espacio = 1
mientras ( $espacio; 0 ; $brecha = piso ( $brecha / 3 ) ){
para ( $i = $brecha ; $i = 0 && $arr [ $j ] > $temp ; $j -= $brecha ) {
$arr [ $j + $gap ] = $arr [ $j ]
}
$arr [ $j + $gap ] = $temp ;
}
}
}
Devuelve $arr ; >
Ejemplo de C void shell_sort (int arr [ ] , int len ) {
int gap , i , j
int temp
for ( espacio = len >> 1 ; espacio > 0 ; espacio >>= 1 )
for ( i = espacio ; i = 0 && arr [ j ] >.temp ; j -= espacio ) p>
arr [ j + espacio ] = arr [ j ]
arr [ j + espacio ] = temp
}
}
Plantilla de muestra de C++
void shell_sort ( matriz T [ ] , longitud int ) {
int h = 1
while; ( h = 1 ) {
for ( int i = h ; i = h && array [ j ] 0) { for (int i = brecha; i arr.Length; i++) { int tmp = arr [i]; int j = i - espacio; while (j >= 0 && arr[j] > tmp) { arr[j + espacio] = arr[j]; = tmp } gap /= 3 }}Lo anterior es una introducción detallada al algoritmo de clasificación Hill, clasificación por inserción, clasificación Hill, clasificación por selección, clasificación por burbuja, clasificación por inserción, clasificación Hill, clasificación por selección, clasificación por burbuja, clasificación por fusión, Los algoritmos de clasificación, como la clasificación rápida, la clasificación en montón y la clasificación por base, tienen cada uno sus propias ventajas y desventajas, que se pueden resumir en un diagrama:
Acerca de la complejidad del tiempo
Orden cuadrado (O (n2)) algoritmos de clasificación Tres tipos de clasificación simple: inserción directa, selección directa y clasificación por burbujas.
Ordenación logarítmica lineal (O(nlog2n)) rápida, ordenación en montón y fusión
Ordenación O(n1+§)), donde § está entre 0 y 1 constante. Clasificación por montaña
Clasificación por orden lineal (O(n)), clasificación básica, además de clasificación por cubos y clasificación por cajas.
Acerca de la estabilidad
Algoritmos de clasificación estables: clasificación de burbujas, clasificación de inserción, clasificación de fusión y clasificación de base.
Algoritmos de clasificación inestables: clasificación por selección, clasificación rápida, clasificación por montaña, clasificación por montón.
Explicación de la terminología:
n: tamaño de datos
k: número de "depósitos"
Clasificación in situ: ocupar una constante número de memoria, no hay memoria adicional ocupada
Clasificación in situ: memoria adicional ocupada
Estabilidad: el orden de dos valores clave iguales después de la clasificación es el mismo que antes de la clasificación
2 claves están en el mismo orden que antes de ordenar
2 claves están en el mismo orden que antes de ordenar
2 claves están en el mismo orden que antes de ordenar
2 Las claves están en el mismo orden que antes de ordenar
Las 2 claves están en el mismo orden que antes de ordenar. p>