希尔排序JAVA

希尔排序:在插入排序的基础上 先对数组设置一个 递减的增量 increment ,对每个增量里面的所有数组组合进行插入排序,效率比直接插入排序要高,但是不稳定。

具体测试小例子:

public static void main(String[] args) {
// TODO Auto-generated method stub
long [] a = {10,123,32,76,123,54,36,67,89,93,23,544,232,111123};
// for(int j=0;j<a.length;j++){
// System.out.print(a[j]+" ");
// }
for(int increment = a.length/2;increment>0;increment/=2){ // 循环增量

for(int i=0;i<increment;i++){//循环每个增量里面的子数组 总共子数组时 increment 个
//对每个子数组 进行插入排序

insertSort(a,i+1,increment); // a代表整个数组 ,I代表 在该增量 下的 第几个子数组
System.out.println(" ");
}

}
//输出数组
for(int j=0;j<a.length;j++){
System.out.print(a[j]+" ");
}
}
private static void insertSort(long [] a,int i ,int inc) { // a代表整个数组 ,I代表 在该增量 下的 第几个子数组
long tempData ;
int k,j;

System.out.print(i+" ");
for( k=i+inc;k<=a.length;k+=inc){ // 从每个子数组的第二个开始 循环代插入的数
System.out.print(k+" ");
tempData = a[k-1];// 把待排序 数组的 第二 个数 放 入临时 变量
j =k-inc-1;//前一个数
// 把每个临时变量比较后插入到 已经排序号的数组
while(j>=0&&tempData<a[j]){ // 按照 升序排列
a[j+inc]=a[j]; // 后移数组
j-=inc;
}
a[j+inc]=tempData; // 因为是 j-=inc 后 把 代插入的数 插入,则需+inc

}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值