小菜开始学习算法(返璞归真->程序=数据结构+算法)

来源:互联网 发布:手机百度软件exscl 编辑:程序博客网 时间:2024/05/29 07:19

算法

算法(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

 

 

原创粉丝点击