【算法导论】插入排序

输入: 打乱随机乱序列
输出:已被按序排列好的序列
基本思想: 从第二个元素起依次向前比较直到符合排序要求
核心思想:增量法
复杂度:O(n^2)[渐进上界], 确切说是插入排序的运行时间介于Ω(n)和O(n^2)
【归并排序】复杂度:o(nlogn)

示例:将乱序数字按正序递增输出

#include<iostream>
#include<vector>
using namespace std;

void insert_sort_by_increase(vector<int>& v)
{
	int len = v.size();
	for(int i=1; i <len; i++)
	{
		int key = v[i];
		int j = i-1;
		while((j>0 || j == 0) && (v[j]>key))
		{
			//swap obj
			v[j+1] = v[j];
			j--;
		}
		v[j + 1] = key;
	}
}

void print_vector(vector<int>& v)
{
	int len = v.size();
	for(int i =0; i< len; i++)
	{
		cout << v[i] << endl;
	}
}

int main()
{
	vector<int> v{1,4,5,2,3,6};
	insert_sort_by_increase(v);
	print_vector(v);
	return 0; 
}

拓展

循环不变式子
循环不变式主体是不变式,也就是一种描述规则的表达式。其过程分三个部分:初始,保持,终止。认真分析该出入排序可知:在每次新的for循环开始排序前,v[i]前的元素全部按序排列完毕,并且其中包含元素全部属于原[0,v[i-1]]中的元素,此种规则也属于一种循环不变式实例

针对循环不变式A, 有如下过程成立:
初始化:循环的第一次迭代之前,A为真。
保持:如果循环的某次迭代之前它为真, 那么下次迭代之前它仍然为真。
终止 在循环终止时, 不变式为我们提供一个有用的性质, 该性质有助于证明算法是 正确的。

>>>Update on 20190621

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值