标签:java 基础
一、希尔排序规则
计算出最大增量,公式h = 3h+1
以h为起始点,-h的增量进行插入排序
反向计算出下一个增量 h = (h-1)/3
重复第二步操作
注:最终都会以1为增量的排序,前面四步是为了减少以1为增量的排序次数
二、代码实例
public class ShellSort
{
public static void main(String[] args)
{
long[] testArr = new long[]{ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
long tempLong; // 被排序数据临时变量
int tempInt; // 插入位置的临时变量
int h = 1; //增量
//1.计算出最大增量,公式h = 3h+1
while(h <= testArr.length/3)
h = h*3 + 1;
// 增量h的插入排序
while(h > 0)
{
//2.以h为起始点,-h的增量进行插入排序
for(int i = h;i < testArr.length;i++)
{
tempLong = testArr[i];
tempInt = i;
while(tempInt > h - 1 && testArr[tempInt - h] >= tempLong)
{
testArr[tempInt] = testArr[tempInt - h];
tempInt -= h;
}
testArr[tempInt] = tempLong;
}
// 3.反向计算出下一个增量
h = (h-1)/3;
}
// 打印排序后的数据
for (int i = 0; i < testArr.length; i++)
System.out.println(testArr[i]);
}
}
标签:java 基础
原文地址:http://881206524.blog.51cto.com/10315134/1788634