希尔排序

介绍

1.又称缩小增量排序

2.是插入排序的改进,减小交换次数

3.时间:交换法>移动法,因为访问数组的次数更少

 

基本思想

1.按一定增量分组,对每组使用插入排序

2.随增量逐渐减少,分组也减少

3.增量为1时,全部元素分为一组,最后一次插入排序,完成排序

 

代码实现(从小到大排序)

public class ShellSort {//从小到大排序

    //交换法
    public static void swapShellSort(int[] array) {
        if (array == null || array.length <= 1) {
            return;
        }
        int temp;
        for (int gap = array.length / 2; gap > 0; gap /= 2) {//gap既是组数,又是步长
            for (int i = gap; i < array.length; i++) {//i是分组中无序表第一个元素
                for (int j = i - gap; j >= 0; j -= gap) {//j是分组中有序表最后一个元素
                    if (array[j] > array[j + gap]) {//无序表第一个元素,在有序表从尾到头遍历比较
                        temp = array[j];//符合规则就交换,类似冒泡
                        array[j] = array[j + gap];
                        array[j + gap] = temp;
                    }
                }
            }
        }
    }

    //移动法
    public static void shiftShellSort(int[] array) {
        if (array == null || array.length <= 1) {
            return;
        }
        for (int gap = array.length / 2; gap > 0; gap /= 2) {//gap既是组数,又是步长
            for (int i = gap; i < array.length; i++) {//i是分组中无序表第一个元素
                int insert = array[i];//储存无序表第一个元素
                int index = i - gap;//有序表最后一个元素的下标
                while (index >= 0 && insert < array[index]) {//与插入排序相同
                    array[index + gap] = array[index];
                    index -= gap;
                }
                array[index + gap] = insert;
            }
        }
    }
}
posted @   半条咸鱼  阅读(28)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示