算法导论之插入排序
实算法导论,实现算法的语言是伪代码,用常用的c语言来实现,简简单单的算法
循环不变式的三个性质:
初始化:它在循环的第一轮迭代开始之前,应该是正确的。
保持:如果在循环的某一次迭代开始之前它是正确的,那么,在下一次迭代开始之前,它也应该保持正确。
终止:当循环结束时,不变式给了我们一个有用的性质,它有助于表明算法是正确的。
INSERTION-SORT 在数组A={31,41,59,26,41,58}上的执行过程
#include "stdio.h"
int main(int argc, char* argv[])
{
int a[6]={31,41,59,26,41,58};
int key;
int i=0;
for(int j=1;j<6;j++)
{
key=a[j];
i=j-1;
while(i>=0&&a[i]>key)
{
a[i+1]=a[i];
i=i-1;
}
a[i+1]=key;
}
for(int
p=0;p<6;p++)
{
printf("%d\n",a[p]);
}
return 0;
}
重写过程INSERTION-SORT,使之按非升序排序。
#include "stdio.h"
int main(int argc, char*
argv[])
{
int a[6]={31,41,59,26,41,58};
int key;
int i=0;
for(int j=1;j<6;j++)
{
key=a[j];
i=j-1;
while(i>=0&&a[i]
{
a[i+1]=a[i];
i=i-1;
}
a[i+1]=key;
}
for(int p=0;p<6;p++)
{
printf("%d\n",a[p]);
}
return 0;
}
伪代码的一些约定:
1、书上的缩进表示程序中的分程序结构,这跟其它的高级语言没有什么大的区别。
2、循环结构,条件结构与pascal中的语法相同。
3、三角符号表示注释。
4、变量都是局部变量。
5、参数采用按值传递方式:被调用的过程会收到参数的一份副本。
6、布尔运算符and,or,有短路能力。

浙公网安备 33010602011771号