思路:
1.将n/2作为第一增量,然后将所有距离为n/2的元素分在同一组,并对每一组的元素进行直接插入排序。然后再取一个比第一增量小的整数作为第二增量,重复上述操作...
2.当增量的大小减到1时,就相当于整个序列被分到一组,进行一次直接插入排序,排序完成。
对于增量的选定无一定论,但最后一个增量必须等于1,也就是说,每趟后一个增量是前一个增量的1/2。
代码:
- package lianxi;
- import java.util.*;
- public class Object01 {
- public static void main(String[] args) {
- /**
- * 希尔排序
- */
- Scanner scanner=new Scanner(System.in);
- System.out.println("请输入数组长度:");
- int n= scanner.nextInt();
- int[] arr=new int[n];
- System.out.println("输入数组元素:");
- for(int i=0;i
- arr[i]=scanner.nextInt();
- }
- while(n>0){
- n=n/2;
- for(int i=0;i
- for(int j=i;j
- if(arr[j]>arr[j+n]){
- int temp=arr[j];
- arr[j]=arr[j+n];
- arr[j+n]=temp;
- }
- }
- }
- }
- System.out.println(Arrays.toString(arr));
- }
- }
-
相关阅读:
Android10 手势导航
ubuntu 安装系统到u盘
Spring - Cloud (微服务)
Python多线程方案
基于casbin的RBAC权限实践
2022年武汉市小微企业服务补贴券签约服务机构申报条件、材料和申报方式
C语言一个奇奇怪怪的小细节(定制初始化中的一个坑)
【Unity】因为获取安卓ID等隐私数据无法通过审核解决思路
Vue源码学习之异步更新原理
websocket逆向-protobuf序列化与反序列化
-
原文地址:https://blog.csdn.net/m0_70264506/article/details/128069915