ITPub博客

首页 > 应用开发 > Java > 排序之插入排序分析

排序之插入排序分析

原创 Java 作者:我思我存在 时间:2014-12-17 12:55:36 0 删除 编辑
    在上一篇中,主要讨论了交换排序的两种排序算法:冒泡排序和快速排序,今天分析另外一种类型,就是插入排序。插入排序有两种排序算法:直接插入和希尔排序。

   直接插入排序的思想是:从第二个元素开始,不断向前查找第一个比它小的数据,在它之后将元素后移一位,然后将待插入的数据插到对应的位置上。
  
   上代码看得清楚些:
   public class DirectSort{
    public static void main(String args[]){
       int a[]={4,3,1,2,8,7,6};
       int temp ,i,j;
       //从第二个元素开始,不断向前插入到合适的位置上
       for(i=1;i             System.out.println("\n");
            temp=a[i];
            //找到第一个满足的位置(在它前面已经有序了)
            for(j=i-1;j>=0;j--){
                if(temp                   a[j+1]=a[j];
                 }
                 else{
                   break;
                 }
            }    
            //插入到相应的位置上            
            a[j+1]=temp;
       }
        System.out.println("\n");
       for(i=0;i            System.out.print(a[i]+"-->");
       }
    }
}

     直接插入排序,也有它存在的问题:
     如果一个数据很小,那它需要移动的位置也很多,与冒泡排序一样。

     对于这个问题,有没有与快速排序一样的思想呢,基本上在最后位置附近呢,这就引入了希尔排序。

    希尔排序的思想:以一个间隔来分组,组内采用直插(移动的元素要少得多了),不断缩小这个间隔。

    看代码吧:
    public class Sort{
    public static void main(String args[]){
       int a[]={4,3,1,2,8,7,6};
       int temp ,i,j,gap;
       //间隔
       gap=a.length/2;
       while(gap>=1){
          for(i=gap;i             temp=a[i];
            for(j=i-gap;j>=0;j=j-gap){
                if(temp                   a[j+gap]=a[j];
                 }
                 else{
                   break;
                 }
            }        
            a[j+gap]=temp;
          }
          //不断缩小间隔
          gap=gap/2;
       }
        System.out.println("\n");
       for(i=0;i            System.out.print(a[i]+"-->");
       }
    }
}

   以上分析了两种插入排序的思想。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30024515/viewspace-1370815/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-11-16

  • 博文量
    15
  • 访问量
    45297