A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不想睡 中级黑马   /  2015-8-27 23:40  /  161 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

以下是代码

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

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马