经典算法之希尔排序
发布日期:2021-05-06 23:31:23 浏览次数:19 分类:技术文章

本文共 1149 字,大约阅读时间需要 3 分钟。

希尔排序

是插入排序的升级版,设置一个gap增量把未排序序列分组、插入排序,继续缩小gap分组、插入排序直至gap为1。只需最后微调一下,就OK啦。

算法步骤:

1.设定gap将序列分组

2.对以上分组进行插入排序
3.缩小gap来分组并继续插入排序
4.直至gap为1,微调

直接上代码

private int[] shellSort(int[] source) {
// 对 arr 进行拷贝,不改变参数内容 //8 9 1 7 2 3 5 4 6 0 int[] arr = Arrays.copyOf(source, source.length); int gap = 1; while (gap < arr.length) {
gap = gap * 3 + 1; } while (gap>0){
//通过这种方式,首次分组为[8,2]、[9,3]... for (int i = gap; i < arr.length; i++) {
int tmp = arr[i]; int j = i - gap; //这个while是为了把分组内的元素,通过插入排序来排列 //比如第一轮第一组,[8,2],while里面把8赋值给了index=4 while (j >= 0 && arr[j] > tmp){
arr[j + gap] = arr[j]; j-=gap; } //上面while结束后,把第一轮第一组的[8,2]中的2赋值给了index=0的位置, //实现了第一轮第一个分组的排序,[8,2]变成了[2,8] arr[j + gap] = tmp; //第一轮第一组处理完后,开始处理第一轮第二组[9,3] } //for循环结束了,代表第一轮排序完成,缩小gap,继续... gap = (int) Math.floor(gap / 3); } return arr; }
上一篇:.properties文件中,中文成显示Unicode
下一篇:将本地已有的maven工程导入工作空间

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月19日 02时40分38秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章