八大排序--04希尔排序(缩小增量排序)

假设数组 arr\[\]= {0,3,1,2,5,7,4,6},请通过插入排序的方式,实现从小到大排列:

方法:将数组按照数组长度的一半为间隔进行分组,组内进行插入排序,小的数据在前面,大的数据在后面;

将数据按照数组长度一半的一半为间隔进行分组,组内进行插入排序;

重复上述步骤,直到无法继续分组(步长为1时),整个数组视为一组,组内进行插入排序,此刻只需要进行微调就可以得到最终结果。

完整代码:

java 复制代码
package Java.start;

import java.util.Arrays;

public class ShellSort {
//希尔排序
	public static void main(String[] args) {
		int[] arr= {0,3,1,2,5,7,4,6};
		sort(arr);
		System.out.println(Arrays.toString(arr));
	}
	
	public static void sort(int[] arr) {
		//设置步长
		for(int grp=arr.length/2;grp>=1;grp=grp/2) {
			for(int i=grp;i<arr.length;i++) {
				//arr[j] arr[j+grp]进行比较
				for(int j=i-grp;j>=0;j=j-grp) {
					if(arr[j]>arr[j+grp]) {
						int temp=arr[j];
						arr[j]=arr[j+grp];
						arr[j+grp]=temp;
					}else {
						break;
					}
				}
			}
		}
		
		
		
		
		
		
		
		
	}
	
	
	
	
}

结果:

相关推荐
陌上花开缓缓归以几秒前
mebdlts3.4.1安全启动全流程
服务器·算法
用户094248568031 分钟前
第28章:JDK容器感知、cgroup与云原生JVM参数治理
java·jvm
鬼手点金1 分钟前
opencode-全能开发者配置
java·linux·服务器·前端·javascript·学习·前向传播
Nebula_g2 分钟前
JavaSE拓展:可变参数
java·开发语言·算法·安全·javase·可变参数
Logic10112 分钟前
C语言/数据结构字符串题解:最短循环节——找出能重复构成原串的最短基础子串
c语言·数据结构·字符串·枚举·时间复杂度·算法题·kmp优化
念越20 分钟前
初中语数英答题与竞赛平台
java·数据库·spring boot
129Lab21 分钟前
BMS 核心算法:SOC 估算从安时积分到 LSTM-UKF 串级融合的 30 年演进(附 Python 实现)
python·算法·lstm·python3.11·bms·soc估算
kgkg22 分钟前
我通过逆向学到了douyin的美颜算法
算法
知守观24 分钟前
一个半天需求干了三天:代码腐化的五个信号与自查命令
java·后端·代码规范
代码山河39 分钟前
Java学习路线图:2026年最新版,从入门到架构师
java·学习·架构·教程·面向对象·项目