学习

    技术2022-05-11  37

      前些天便开始读T.H Cormen等著的<<算法导论>>,希望能在数据结构课程结束后,对基本DS及算法设计分析基础有更加深入的了解.

      今天从MIT的开放课程计划中顺利找到了<<ITA>>,MIT给出的教学计划囊括了排序,递归,树,图结构,以及NP问题分析.我打算选取本书中较为重要同时有浓厚兴趣,特别是数学分析部分来学习.下载了MIT教学讲义,浏览起来很象国内使用的PPT教学,整个教学言简意赅,同时不失风趣幽默.

      今天用C首先实现了插入排序和合并排序,具体代码为:

      对于插入排序,除理解时间复杂度的计算以外,我特别留意在比较交换部分的代码实现:

    /* 插入排序算法的实现 */#include <stdio.h>void InsertionSort(int A[])  {int j,i,key;   for(j=1;j<=5;j++)   {         key=A[j];        for(i=j-1;i>=0;i--)      if(key>=A[i]) break;     else A[i+1]=A[i];     A[i+1]=key;   }  }

    void main(){   int n;   int AB[6]={5,2,4,6,1,3};   InsertionSort(AB);   for(n=0;n<=5;n++)    printf("%d",AB[n]);   getch();}

      while(A[i]>0 AND A[i]>A[j]) -------------1

        do A[i+1]=A[i]---------------2

              i=i-1;------------------3

        A[i+1]=key;-------------4

      第1句限定进入比较的条件,无可非议;第2句即当j所在数值小于其前一数值,将两值交换,交换后A[I]的值顺利到位,J值随被替换但KEY中仍为保留;第3句,为寻找数值的最后确定位置作出的步减.第四句,在有必要交换时,能重新安排J值,不需交换时,即A[j]=key.妙哉!


    最新回复(0)