十大排序算法之插入排序

十大排序算法之插入排序

算法思想

插入排序:是将数组中逐一已经排序好的数据进行比较的过程,先将前两个元素排号,再将第三个元素插入到适当的位置,接着插入第四个,一直重复 直到所有元素插入完成为止。

可以看作 在一个有序序列 R1 R2 R3 R4 ~~~~~ Ri中 插入一个R 使得i+1个记录排序妥当的。

举例说明该过程

在这里插入图片描述 插入排序过程分析 我们说 一个数就是有序的 第二步插入23 到合适的位置 仍然是有序的 可以想到他是一个稳定的算法

时间复杂度的分析

最坏的情况下当然是将每个数字都比较一遍
(n-1)+(n-2)+(n-3)+…+3+2+1 = n(n-1)/2次
时间复杂度为o(n²)
最好情况 则为O(n)

空间复杂度的分析

因为插入 排序 仅仅只需要一个额外的空间 所以他的空间复杂度为最佳 即为O(1);

使用场景:适用于大部分数据已经排过序的情况 例如 在数据库中新加入一个新数据 我们就可以使用插入排序

插入排序在使用时会造成数据的大量迁移,所以在数组上 不建议使用插入排序,在链表中使用插入排序则更好的体现了插入排序的优点。

代码实现

如何插入一段漂亮的代码片.

// 快速排序
public  void mySort() {
      int i; // 扫描次数
      int j; //定位比较的元素
      int tmp;//元素临时存放区
      for (i = 1; i < a.length; i++) {
		j = i -1; //j为定位器 我们发现 没插入一个元素是 从后面比较 当然 你也可以从前面来比较
		tmp = a[i];  //存放待比较的元素值
		while( j >= 0 && tmp < a[j]) {//如果小的话 我们当然就要寻找合适的位置  将比他大的元素全部后移 即完成这一波的排序
			a[j + 1]  = a[j];//这里j是定位到被比较的元素 待排序元素比他大  所以后移
			j--;//继续与上一个元素进行比较i
		}//找到合适的位置 或者相等循环即跳出  遇到相同的 值 也不会改变其位置 所以说插入排序算法是稳定的
		a[j + 1] = tmp; //每次循环完成后我们会发现 j--  所以定位应该在上一个元素上  用j+1 解决这个定位问题
		
	}
}

测试样例

在这里插入图片描述

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值