希尔排序法
希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,
把待排序文件中所有记录分成个组,所有距离为的记录分在同一组内
,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。
当到达=1时,所有记录在统一组内排好序。
各组内的排序通常采用直接插入法。由于开始时s的取值较大,
每组内记录数较少,所以排序比较快。随着不断增大
,每组内的记录数逐步增多,但由于已经按排好序,
因此排序速度也比较快。
package Sort;
/**
* 希尔排序
*
*
*/
public class Shell_Sort {
int[] a;
public Shell_Sort() {
a=new int[]{8,19,2,3,100,99,1000,888,-1,0};
}
public Shell_Sort(int size) {
a=new int[size];
}
/**
* 分组排序,分组规则
* 1.d=n/2
* 2 d=d/2
*/
public void ShellSort() {
int n=a.length;
for(int d=n/2;d>0;d/=2) {
//插入排序
for(int i=0;i<d;i++) {//增量为1时结束循环
//遍历所有子序列
for(int j=i+d;j<n;j+=d){
//每个子序列进行插入排序
int insertNode=a[j];
int k=j-d;
while(k>=i &&a[k]>insertNode) {
a[k+d]=a[k];
k=k-d;
}
a[k+d]=insertNode;
System.out.println("内循环");
display();
}
System.out.println("第二内循环循环完一次");
display();
}
System.out.println("循环完一次");
display();
}
}
//遍历
public void display() {
for (int i : a) {
System.out.print(i+"\t");
}
}
public static void main(String[] args) {
Shell_Sort sort = new Shell_Sort();
sort.ShellSort();
}
}