栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据结构与算法:希尔排序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构与算法:希尔排序

希尔排序

又叫“缩小增量排序”,插入排序的一种更高效的改进版本

基本原理

1、选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组
2、对分好组的每一组数据完成插入排序
3、减小增长量,直到减小到1,重复第二步操作

增长量

确定增长量的规则如下

求出增长量的最大值,先设最开始 h=1,有如下规则:

int h = 1;
while(h<数组的长度/2){
	h = 2h+1;
}

接下来再根据规则减小增长量h

h = h/2;

增长量是用来控制分组的

图解

假设有数组:{9,1,2,5,7,4,8,6,3,5}
长度为10,所以初始的增长量由上面的方式可以求得为h=7,再一步步缩小增长量,来进行分组

当h = 7时

当h = 3时
当h=1时

具体代码
//主要思想:先分组,再进行排序
public class ShellSort {

    public static void main(String[] args) {
        //定义一个数组
        int arr[] = {9,1,2,5,7,4,8,6,3,5};
        //定义h来表示增长量
        int h = 1;

        while(h=1){
            //根据h进行分组,找到待交换的元素
            for(int i = h; i=h; j-=h){
                    //比较并交换位置
                    if(arr[j-h]>arr[j]){
                        int temp;
                        temp = arr[j-h];
                        arr[j-h] = arr[j];
                        arr[j] = temp;
                    }else{
                        //直到将这一轮中最小的数移动到最前面时时退出循环
                        break;
                    }
                }
            }
            
            //缩小h的值,改变增长量
            h = h/2;
            //System.out.println(h + "n");  //这串代码可以看到增长量的变化
        }

        for(int array : arr){
            System.out.print(array + " ");
        }
    }
}


可能写的有点混乱,但大致意思就这样了,个人理解,具体请结合代码,步步调试,很好理解的,有误望指出,一起进步呀

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/731354.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号