Loading

希尔排序

希尔排序

  • 希尔排序就是插入排序的升级版,普通的插入排序只是用于小规模数组或者比较有序的数组

  • 希尔排序交换不相邻的元素以对数组的局部进行排序,根本思想还是插入排序

  • 希尔排序是让间隔step的元素有序,刚开始是h = len / 2,然后 h = h / 2 / 2,一直这样缩小下去,直到为1,此时数组就是有序的了

  • 代码实现

    import java.util.Arrays;
    
    /**
     * @Description: 希尔排序
     * @Author: LinZeLiang
     * @Date: 2020-10-06
     */
    public class ShellSort {
    
        public static void main(String[] args) {
            int[] a = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
    
            shellSort(a);
    
            System.out.println(Arrays.toString(a));
    
        }
    
        /**
         * @param a 待排序数组
         */
        public static void shellSort(int[] a) {
            //定义变量,进行分组,初始化分为a.length/2组,
            for (int h = a.length / 2; h > 0; h /= 2) {
                //将每一组进行插入排序
                for (int i = h; i < a.length; i++) {
                    int temp = a[i];
                    int j;
                    //j>=0的判断要在a[j]>temp的判断前面,因为如果位置反了,就会导致索引为负数,抛出异常
                    for (j = i - h; j >= 0 && a[j] > temp; j -= h) {
                        //如果改组的前一位大于temp,那么就将后移一位
                        a[j + h] = a[j];
                    }
                    //直到找到小于temp,才将temp插入该位置前一个
                    a[j + h] = temp;
                }
            }
        }
    }
    
posted @ 2020-10-08 00:14  linzeliang  阅读(129)  评论(0)    收藏  举报