Algoritmo de clasificación --- clasificación Hill (versión java)

Tipo de colina

principio

Primero, divida la tabla que se ordenará en varios registros separados por un cierto "incremento" para formar una subtabla e insértelo directamente en cada subtabla. Cuando los elementos de toda la tabla estén básicamente en orden, realice el proceso completo grabar de nuevo Ordenación por inserción directa. Hill sort resuelve principalmente el problema de la ordenación por inserción directa porque los elementos de la tabla están básicamente ordenados, pero algunos elementos están lejos de sí mismos, lo que provoca más intercambios.

El proceso de clasificación de clasificación Hill se implementa como se muestra en el
Inserte la descripción de la imagen aquí
código

public class ShellSort {
    
    
    public static void main(String[] args) {
    
    
        shellSort();
    }

    //交换法实现shell排序
    public static void shellSort() {
    
    
        int[] arr = {
    
    8, 9, 1, 7, 2, 3, 5, 4, 6, 0};
        int temp = 0;
        //gap代表步长
        for (int gap = arr.length / 2; gap > 0; gap /= 2) {
    
    
            // i是arr[gap]之后的元素arr[5]-arr[9]
            for (int i = gap; i < arr.length; i++) {
    
    
                // 遍历各组中所有的元素(共gap组,每组有个元素), 步长gap
                for (int j = i - gap; j >= 0; j -= gap) {
    
    
                    // 如果当前元素大于加上步长后的那个元素,则交换
                    if (arr[j] > arr[j + gap]) {
    
    
                        temp = arr[j];
                        arr[j] = arr[j + gap];
                        arr[j + gap] = temp;
                    }
                }
            }
            System.out.println(Arrays.toString(arr));
        }
    }

    //对交换式的希尔排序进行优化->移位法
    public  static void shellSort2() {
    
    
        int[] arr = {
    
    8, 9, 1, 7, 2, 3, 5, 4, 6, 0};
        for (int gap = arr.length/2; gap >0; gap/=2) {
    
    
            // 从第gap个元素,逐个对其所在的组进行直接插入排序
            for (int i = gap; i < arr.length; i++) {
    
    
                int j = i;
                int temp = arr[j];
                if (arr[j] < arr[j - gap]) {
    
    
                    while (j - gap >= 0 && temp < arr[j - temp]) {
    
    
                        //移动
                        arr[j] = arr[j - gap];
                        j -= gap;
                    }
                    //当退出while后,就给temp找到插入的位置
                    arr[j] = temp;
                }
            }
        }
    }
}

1. Complejidad temporal de la clasificación Hill

En el peor de los casos, la complejidad temporal de la clasificación Hill es O (n ^ 2).

2. Complejidad espacial de la clasificación Hill

Solo se usa un número constante de unidades auxiliares, por lo que la complejidad del espacio es O (1).

3. Estabilidad de la clasificación de colinas

Cuando los registros de la misma clave se dividen en diferentes subtablas, el orden relativo entre ellos puede cambiar, por lo que la clasificación Hill es un método de clasificación inestable.

Supongo que te gusta

Origin blog.csdn.net/qq_33626996/article/details/113178160
Recomendado
Clasificación