算法导论之插入排序

实算法导论,实现算法的语言是伪代码,用常用的c语言来实现,简简单单的算法

循环不变式的三个性质:

初始化:它在循环的第一轮迭代开始之前,应该是正确的。

保持:如果在循环的某一次迭代开始之前它是正确的,那么,在下一次迭代开始之前,它也应该保持正确。

终止:当循环结束时,不变式给了我们一个有用的性质,它有助于表明算法是正确的。

INSERTION-SORT 在数组A={314159264158}上的执行过程
 #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、布尔运算符andor,有短路能力。

 

posted @ 2011-08-30 08:42  Johnson2  阅读(321)  评论(0)    收藏  举报