排序算法-插入排序

插入排序




基本思路:

基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。

问题描述:
     举个例子来说,就用前面的数组,我们要对一个有5个元素的数组进行升序排列,假设
第一个元素的值被假定为已排好序了,那么我们就将第2 个元素与数组中的部分进行比较,
如果第2 个元素的值较小,则将它插入到第1 个元素的前面,现在就有两个元素排好序了,
我们再将没有排序的元素与排好序的元素列表进行比较,同样,如果小于第一个元素,就将
它插入到第一个元素前面,但是,如果大于第一个元素的话,我们就将它再与第2 个元素的
值进行比较,小于的话就排在第2 个元素前面,大于的话,就排在第2 个元素的后面。以此
类推,直到最后一个元素排好序。

 

点评:

     该算法在数据规模小的时候十分高效,该算法每次插入第K+1到前K个有序数组中
一个合适位置,K从0开始到N-1,从而完成排序


基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。排序过程:

 

 

 

public class InsertSorter<T extends Comparable<T>> extends Sorter<T> {


	/**
	 * 插入排序
	 */
	@Override
	public void sort(T[] array, int from, int len) {
		
		 T tmp=null;
         for(int i=from+1;i<from+len;i++)
         {
             tmp=array[i];
             int j=i;
             for(;j>from;j--)
             {
                 if(tmp.compareTo(array[j-1])<0)
                 {
                     array[j]=array[j-1];//把大值后移
                 }else
                	 break;//前面默认已经排好序
                
             }
             array[j]=tmp;//保存被替换的的值,进入下一个循环
         }
   }


	/**
 * 测试	
	 * @param args
	 */
	public static void main(String[] args) {
		Integer array[] = {2,35,5,78,1,90,13,56} ;
		for (int i = 0 ; i<array.length ; i++){
			System.out.print(array[i]+",");
		}
		System.out.println();
		Sorter sorter = new InsertSorter<Integer>() ;
		sorter.sort(array) ;
			
		for (int i = 0 ; i<array.length ; i++){
			System.out.print(array[i]+",");
		}				
		}
}

 

2、折半插入排序

在直接插入排序中,为了找到插入位置,采用了顺序查找的方法。为了提高查找速度,可以采用折半查找,这种排序称折半插入排序。

3、2-路插入排序

为减少排序过程中移动记录的次数,在折半插入排序的基础上加以改进:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值