前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >排序----插入排序

排序----插入排序

作者头像
SuperHeroes
发布2018-05-30 17:30:37
4740
发布2018-05-30 17:30:37
举报
文章被收录于专栏:云霄雨霁云霄雨霁

上一篇:选择排序

对随机长度为N且主键不重复的数组,平均情况下插入排序需要~N^2/4次比较和~N^2/4次交换;最坏情况需要~N^2/2次比较和~N^2/2次交换;最好情况需要N-1次比较和0次交换。插入排序平均时间复杂度:O(N^2)。

插入排序的特点:

  • 与选择排序一样,当前索引左边的所有元素都是有序的。但插入排序中它们的最终位置还未确定。
  • 插入排序所需要的时间取决与输入中元素的初始顺序。
  • 插入排序不会访问索引右侧的元素,而选择排序不会访问数组左侧的元素。
代码语言:javascript
复制
public class Insertion {
	public static void sort(Comparable[] a){
		int N = a.length;
		for(int i = 1;i<N;i++)
			for(int j=i;j>0 && less(a[j],a[j-1]);j--)
				exch(a,j,j-1);
	}
	//less()、exch()、isSorted()、main()方法见“排序算法模板”
}

算法改进:

  • 插入排序的哨兵。在插入排序的实现中先找到最小元素将其置于数组的最左边,这样就能去掉内循环中的判断条件j > 0;注意,这是一种常见的规避边界测试的方法,能够省略判断条件的元素通常被称为哨兵。
  • 不需要交换的插入排序。在插入排序中使较大元素右移一位而不是每次都交换。

在所有主键都相同时,插入排序比选择排序更快;对于逆序数组,选择排序比插入排序更快。

下一篇:希尔排序

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.11.29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档