码迷,mamicode.com
首页 > 编程语言 > 详细

直接插入排序

时间:2016-05-07 01:17:38      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:排序   直接插入   

直接插入排序的思想:每次把待排序的记录按照关键字插入到前面已经排好的记录集当中,直到结束!


给个简单示例:

待排序的数组为 : [2] 5 9 8 6 1

第一次      : [2 5] 9 8 6 1

第二次      : [2 5 9] 8 6 1

第三次      : [2 5 8 9] 6 1

第四次      : [2 5 6 8 9] 1

第五次      : [1 2 5 6 8 9]   //结束


核心代码:

for(int i=2,j;i<=numbers.length-1;i++){
	numbers[0]=numbers[i];
	j=i-1;
	while(numbers[0]<numbers[j]){
	    numbers[j+1]=numbers[j];
	    j--;
	}
	numbers[j+1]=numbers[0];
}

对比核心代码看算法实现步骤:

  1. 保存待排序记录到标志位number[0] 

  2. j=i-1,用来插入到之前已排好的记录集中

  3. 依次往前对比,不满足终止条件时就将j位置对应的当前记录后移,j向前移动一位

  4. 终止条件:标志位或者满足条件位置


该算法的分析:

  1. 稳定性:稳定

  2. 时间复杂度:

    原始数据正序时不需要移动,总比较次数:n-1,即O(n)

    原始数据逆序时频繁移动,总比较次数:(n*n+n-2)/2,即O(n*n)

    原始数据无序,第i趟的平均比较次数为:(i+1)/2,总次数为(n*n+3*n)/4,即O(n*n)

    故此数据越趋向于正序时,比较次数和移动次数最少(适用)

  3. 空间复杂度:只需要浪费一个单元,numbers[0];

直接插入排序

标签:排序   直接插入   

原文地址:http://11291891.blog.51cto.com/11281891/1770872

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!