思路:
1.将n/2作为第一增量,然后将所有距离为n/2的元素分在同一组,并对每一组的元素进行直接插入排序。然后再取一个比第一增量小的整数作为第二增量,重复上述操作...
2.当增量的大小减到1时,就相当于整个序列被分到一组,进行一次直接插入排序,排序完成。
对于增量的选定无一定论,但最后一个增量必须等于1,也就是说,每趟后一个增量是前一个增量的1/2。
代码:
package lianxi;
import java.util.*;
public class Object01 {
public static void main(String[] args) {
/**
* 希尔排序
*/
Scanner scanner=new Scanner(System.in);
System.out.println("请输入数组长度:");
int n= scanner.nextInt();
int[] arr=new int[n];
System.out.println("输入数组元素:");
for(int i=0;i<arr.length;i++){
arr[i]=scanner.nextInt();
}
while(n>0){
n=n/2;
for(int i=0;i<n;i++){
for(int j=i;j<arr.length-n;j=j+n){
if(arr[j]>arr[j+n]){
int temp=arr[j];
arr[j]=arr[j+n];
arr[j+n]=temp;
}
}
}
}
System.out.println(Arrays.toString(arr));
}
}