黑马程序员技术交流社区

标题: 希尔排序 [打印本页]

作者: 不想睡    时间: 2015-8-27 23:40
标题: 希尔排序
希尔排序:是直接插入排序的改进,该方法又称缩小增量排序。思想是将整个无序列分割成若干个小的子序列后,再分别进行插入排序,然后依次缩减增量再次排序,待到增量足够小时,对全体元素直接进行插入排序。

以下是代码

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();
        
        }
    }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2