希尔排序是在直接插入排序上改进而来。
1.以一个增量temp将要排序的数组进行分组,所以距离为temp的倍数的元素在同一个组;
2.对每一个组进行快速插入排序;
3.改变增量,从复以上操作;
4.直至增量等于1,结束。
实现代码如下:
//希尔排序 public class Demo32 { public static void main(String args[]){ int r[]={2,4,8,1,5,6,3,9,10,5,0,4,7}; fun(r); for(int i=0;i<r.length;i++){ System.out.print(r[i]+","); } int i=1; } public static void fun(int intArray[]){ int temp = intArray.length/2 ; //声明增量,以此为间隔将元素分组 int var; while(temp>0){ for(int i=temp;i<intArray.length;i++){ //对所有相隔为temp的元素进行直接插入排序 var = intArray[i]; int j=i-temp; while(j>=0&&intArray[j]>var){ intArray[j+temp]=intArray[j]; j=j-temp; } intArray[j+temp]=var; } temp=temp/2; //改变增量 } } }