希尔排序:相当于效率更高的插入排序(先进行预排序,确定大致顺序,后进行插入排序),可以参考前文插入排序法代码
/**
*
* 希尔排序:相当于效率更高的插入排序(先进行预排序,确定大致顺序,后进行插入排序)
* @param arr 需排序的数组
*/
public void shellSort(int[] arr) {
int r,temp;
int i,j;
int x=0;
//划分排序,对半分开,两边对应位置的元素做比较
for(r=arr.length/2;r>=1;r/=2) {
//当r=1时,一下内容相当于插入排序法。
for(i=r;i<arr.length;i++) {
temp=arr[i];
j=i-r;
//对应位置比较,小的放前面
while(j>=0&&arr[j]>temp) {
arr[j+r]=arr[j];
j-=r;
}
//否则,找到temp位置j+r,插入进去
arr[j+r]=temp;
}
//输出每一步的排序结果
System.out.print("第"+(++x)+"次的排序结果为:");
for (int num : arr) {
System.out.print(" "+num);//遍历输出当前的数组
}
System.out.println();//换行
}
}