希尔排序(java实现)
来源:互联网 发布:星球模拟软件 编辑:程序博客网 时间:2024/06/05 17:42
现在有一个array,希尔排序就是设定一个增量incrementNum(0<incrementNum<array.length)。
先从array[0]开始,以incrementNum为增量的进行直接插入排序,直到数组末尾,然后从array[1]开始重复:以incrementNum为增量的进行直接插入排序; 然后从array[1]开始重复......一直到array[n]。
然后取一个小于上一步增量的新的增量(比如设置为incrementNum/2),对前一个步骤的结果array进行遍历,直接插入排序....
再取小于上一步增量的新的增量,重复进行:遍历,直接插入排序
直到新的增量小于1之后再退出循环
步骤1:比如现在有数组{82 ,31 ,29 ,71, 72, 42, 64, 5,110} 第一次取增量设置为array.length/2 = 4 先从82开始以4为增量遍历直到末尾,得到(82,42) 排序得到{42 ,31 ,29 ,71, 72, 82, 64, 5,110}。 然后从第二个数31开始重复上一个步骤,得到(31,64) 排序得到{42 ,31 ,29 ,71, 72, 82, 64, 5,110}....... 以4为增量的遍历完数组之后,得到的结果是{42 ,31,5,71,72,82,64,29,110}
然后重新区增量,这儿设定为incrementNum/2 = 2,对{42 ,31,5,71,72,82,64,29,110}重复步骤1。 完事之后,在取新的增量,重复步骤1。 直到取到的增量小于1,退出循环。
java实现代码如下:
/**
* 希尔排序
* @param arrays 需要排序的序列
*/
public static void sort(int[] arrays){
if(arrays == null || arrays.length <= 1){
return;
}
//增量
int incrementNum = arrays.length/2;
while(incrementNum >=1){
for(int i=0;i<arrays.length;i++){
//进行插入排序
for(int j=i;j<arrays.length-incrementNum;j=j+incrementNum){
if(arrays[j]>arrays[j+incrementNum]){
int temple = arrays[j];
arrays[j] = arrays[j+incrementNum];
arrays[j+incrementNum] = temple;
}
}
}
//设置新的增量
incrementNum = incrementNum/2;
}
}
- 希尔排序(java实现)
- 希尔排序(Java实现)
- 希尔排序实现(Java)
- 希尔排序(java实现)
- 希尔排序(JAVA实现)
- 希尔排序(java实现)
- 希尔排序[Java实现]
- Java实现希尔排序
- 希尔排序----java实现
- 希尔排序--Java实现
- 希尔排序 java实现
- java实现希尔排序
- 希尔排序Java实现
- 希尔排序 java实现
- Java实现希尔排序
- java实现希尔排序
- 希尔排序 Java实现
- 希尔排序(Java实现)
- typedef 与define的联系和区别
- Digitalocean VPS centos 7安装图形化界面KDE和VNC实现远程图形化操作
- POJ3624--Charm Bracelet(dp)
- DP新姿势
- sleep 和 wait 区别
- 希尔排序(java实现)
- leetcode题235. Lowest Common Ancestor of a Binary Search Tree
- C语言拓展笔记
- 思维导图系列(1)-那些年IM的一些总结
- 哈希表
- 图像预处理——边界跟踪、图像分割
- iOS支付宝支付(Alipay)详细接入
- 1
- 2