直接插入排序 —— 最简单的插入类排序

学习资料:《算法笔记》

直接插入排序(Straight Insertion Sort)是将一个个元素插入有序部分的过程。

描述:

对于一个序列A[1]~A[n],令i从2开始枚举,循环n-1趟操作。

例如,当进行到第 j 趟时,此时在A[ j ]之前的A[ 1 ] ~ A[ j-1 ]已经有序,那么A[ j ]就从后往前枚举已有序部分找某个位置,使得当A[ j ]插入后(有序部分在插入位置及其后面的元素会往后移一位),A[ 1 ] ~ A[ j ]有序。

初始有序部分长度为1,每执行一趟使得有序部分长度+1,执行完n-1趟后,实现整个序列有序。

代码实现:

void insert_sort(){
	for(int i = 2; i <= n; i ++ ){	//循环n-1趟 
		int tmp = a[i];	//将a[i]存下来 
		int j = i;	//j从i的位置开始往前枚举 
		while(j > 1 && tmp < a[j - 1]){
			a[j] = a[j - 1];	//往后移一位 
			j--;
		}
		a[j] = tmp;
	}
}

算法分析:
时间复杂度:平均O(n2),最好O(n), 最坏O(n2)
空间复杂度:O(1)
稳定性:稳定

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值