插入排序java实现

一.前提

1.为简单起见,讨论从小到大的整数排序
2.只讨论基于比较的排序(< = >有定义)
3.只讨论内部排序
4.稳定性:任意两个相等的数据,排序前后相对位置不发生变化


二.插入排序原理

本文只讨论直接插入排序
直接插入排序的思想是每次将一个待排序的元素按照其大小插入到前面已经排好序的子序列中,直到元素全部插入。

已经排好序的序列 array(1 ~ i-1)待排序的元素array(i)未排好序的序列array(i+1 ~ n)


三.实现

public int[] Insertion_Sort(int[] array){
		//把i设为从1开始,因为第0个元素不需要排序,前面只有它自己
		//也防止下面的j-1出现数组下标越界的情况
		for(int i = 1; i < array.length; i++){
			int temp = array[i];
			int j;
			//需要注意的是,待排序元素前面的元素已经排好序了
			//就是说,如果array[j-1]的元素比待排序元素小,则前面的元素也一定会比待排序元素小
			//于是条件不满足,循环跳出
			for(j = i; j > 0 && array[j-1] > temp; j--)
				array[j] = array[j-1];
			//循环出来的j就是待排序元素的位置
			array[j] = temp;
		}
		
		return array;
		
}




四.时间复杂度

  • 最好情况:顺序, T(n) = O(n)
  • 最坏情况:逆序, T(n) =O(n2)


五.空间复杂度

所有操作都是在一个数组内进行的,没有额外的添加空间
S(n) = O(1)



六.参考

1.b站-【浙江大学】数据结构
2.csdn-排序算法:详细理解插入排序(直接插入排序和折半插入排序)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值