算法及测试过程
package sort;
public class ShellSortTest2 {
public int data[]={2,4,1,3,5,43,6,35,9,8};
public static void main(String[] args) {
ShellSortTest2 test=new ShellSortTest2();
int length=test.data.length;
System.out.println("排序前:");
for(int i=0;i<length;i++){
System.out.print(test.data[i]+"\t");
}
System.out.println(" ");
test.shellSort(length);//调用排序方法
System.out.println("排序后:");
for(int i=0;i<length;i++){
System.out.print(test.data[i]+"\t");
}
}
//希尔排序data[]={2,34,1,3,5,43,6,35,9,8}
public void shellSort(int index){
int temp;//临时变量
int len=index/2;//分割集合的间隔长度,初始值为数组长度的一半
int pointer;//进行比较的下标位置
//1、按每次减半划分步长(增量),知道步长为1停止
while(len>=1){
//2,4,1,3,5,43, 6,35,9,8
//2、对各个集合进行处理,两两比较
for(int i=len;i<index;i++){
pointer=i-len;//计算要和当前值进行比较的数的位置
temp=data[i];
//3、将临时变量与集合内的数进行比较
while(temp<data[pointer]){
data[pointer+len]=data[pointer];
pointer=pointer-len;
//如果当前下标位置大于或等于当前的步长,则继续循环,按照步长与前面所有的数进行比较
//直到遇到比当前临时变量小的数为止
if(pointer<0){
break;
}
}
data[pointer+len]=temp;//把临时变量赋值到当前下标所在位置
}
len=len/2;//每次递减一半
}
}
}