希尔排序:是直接插入排序的改进,该方法又称缩小增量排序。思想是将整个无序列分割成若干个小的子序列后,再分别进行插入排序,然后依次缩减增量再次排序,待到增量足够小时,对全体元素直接进行插入排序。
以下是代码
public class ShellSort{
public static void main(String[] args){
int score[]={900,878,891,904,865,912,868,870,898,903};
//打印数组元素
System.out.print("未排序结果:");
for(int i=0;i<score.length;i++){
System.out.print(score[i]+" ");
}
System.out.println();
//希尔排序:从大到小排序
for(int incre=score.length/2;incre>0;incre=incre/2){//刚开始增量为5,后来为2,最后为1.
for(int i=incre;i<score.length;i++){
int temp=score[i];
int j=0;
for(j=i;j>=incre;j=j-incre){
if(temp>score[j-incre]){//刚开始增量为5时,score[5]和score[0]比较,若score[5]>score[0],则因temp保存score[5]的值,把score[0]赋值给score[5],相当于交换这两个数组元素的值,最终使score[0]保持较大的值。然后score[6]和score[1]比较,依次这样。
score[j]=score[j-incre];
}else{
break;
}
}
score[j]=temp;
}
}
//最终排序的结果
System.out.print("最终排序结果:");
for(int i=0;i<score.length;i++){
System.out.print(score[i]+" ");
}
System.out.println();
}
} |
|