算法
算法(algorithm)就是定义良好的计算过程,它取一个或一组值作为输入,并产生出一个或一组作为输出。
衡量算法效率的常用标准是速度,即一个算法得到最后所需要的时间。
算法分析即指对一个算法所需要的资源进行预测。
RAM模型包含了真实计算机中常见的指令:算术指令(加法,减法,乘法,除法以,取余,向下取整,向上取整指令),数据移动指令(装入,存储,复制指令)和控制指令(条件和非条件转移,子程序调用和返回指令)。其中每条指令所需的时间都为常量。
1.1. 插入算法
插入算法的核心是循环不变式。
循环不变式的三个性质:
Ø 初始化;它在循环的第一轮迭代开始之前,应该是正确的。
Ø 保持:如果在循环的某一次迭代开始之前它是正确的,那么,在下一次迭代开始前,它也应该保持正确。
Ø 终止:当循环结束时,不变式给了我们一个有用的性质,它有助于表明算法是正确的。
首先假定第一个元素有序,那么第二个元素为KEY值,不论是从小到大,还是从大到小。
都是从有序序列的最后一个开始比较,逐个向前跟KEY值比较。
算法实现:
void Insert_sort( int *a)
{
for( int j = 1;j<=length(a);j++)
{
int key = a[j];
int i = j-1;
while( i>= 0 && a[i] > key) //有序元素的最后一个元素开始
{
a[i+1] = a[i];
i= i -1;
}
A[i+1] = key; //每插入一个元素保持有序
}
}
时间复杂度:理论值是::O(N)~O(N的平方) 实际值:c1n2+c2n+c3
空间复杂度:理论值是:O(1) 实际值:只需一个KEY所占的额外空间。
测试 :随机12000个数
Starttime 1.75s
Endtime 2s
using time0.25s