----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
以下是我编写的希尔排序代码:
/**
我对希尔排序的粗浅理解:
先对数组中小标间隔为一定值的数进行排序
而后逐渐缩小这种间隔,直至间隔为1,完成排序
@author shine
*/
import java.util.Arrays;
public class Shine01{
public static void main(String[] args){
int[] ints = {12,34,5,54,35,2,78,62,85,35,9,6,18,24,38,42};
System.out.println(Arrays.toString(order(ints)));
}
public static int[] order(int[] ints){
int d = ints.length;
while(true){
d = d/2;
for(int i=0; i<d; i++){
//下面这个嵌套for循环实际上实现了...>a[i+2d]>=a[i+d]>=a[i]的功能
for(int j=i+d; j<ints.length; j+=d){
int temp = ints[j];
int k;
for(k=j-d; k>=0&&ints[k]>temp; k-=d){
ints[k+d] = ints[k];
}
ints[k+d] = temp;
}
}
//具体实现方法如下:
//首先保证所有下标间隔为d的数间的排序,如:a[8]>a[0],a[9]>a[1],a[10]>a[2]……
//随后缩小下标的间隔,如:a[12]>a[8]>=a[4]>=a[0],a[13]>a[9]>=a[5]>=a[1]……
//并进一步缩小,如:a[14]>a[12]>a[10]>a[8]>a[6]>a[4]>a[2]>a[0],……
//直至d=1,即:a[15]>a[14]>a[13]>a[12]>……,至此排序完成
if(d==1)
return ints;
}
}
}
一时兴起就写了这个代码,算法参考了一个哥们用C写的一段代码,也看了百度百科对希尔排序的分析,但感觉讲的不太清晰。