麻省理工《算法导论》课程笔记——第1课时

算法分析理论研究:是关于计算机程序性能和资源利用的研究。
程序设计方面什么比性能更重要:正确性、简洁、可维护性、成本(时间成本、开销)、稳定性、健壮性、功能性、模块化、安全性、可扩展性、与用户友好性;
这么多东西比性能更重要,我们为什么还要关注性能?
通常性能的好坏决定是否可行。
排序:
插入排序:(伪代码)
for j<-2 to n
    do key<-A[j]
       i<-j-1
       while i>0 and A[i]>key
             do A[i+1]<-A[i]
                i<-i-1

       A[i-1]<-key

#include
  void InsertionSort(int *num,int n) 
  {
  	int i = 0;
  	int j = 0;
  	int tmp = 0;
  	for(i = 1;i=0&&tmp=0对其进行边界限制。第二个为插入判断条件 
	  {
	    num[j+1] = num[j];//若不是合适位置,有序组元素向后移动 
		j--; 
	  }
	  num[j+1] = tmp;//找到合适位置,将元素插入。 
	}
  }
  int main() 
  {
  	int i = 0;
  	int num[8]={9,3,4,2,6,7,5,1};
  	InsertionSort(num,8); 
  	/*这个函数必须知道元素的个数,所以将元素个数传入。
	有心者可以在函数内部用sizeof求出元素个数 */
  	for(i=0;i<8;i++)
  	{
     	printf("%d ",num[i]);
	}
  	return 0;
  }

(使用算术级数,也叫等差数列,相关知识参见数学分析课程及参考书)


算法运行时间:
1.取决于输入数据
2.取决于输入规模(我们将输入的规模参数化以后,我们把与进行时间看做待排列数据规模的函数,将此作为审视算法的依据)
3.运行时间的上界(运行时间会不会超过某个数值,代表了对用户的承诺)
对算法的各种分析:
1.最坏情况分析:T(n)=程序运行最长消耗时间(T(n)不能算作函数,只能算作相关性,除了和n有关系还和输入的数据顺序有关)。
2.平均情况;T(n)=输入规模n之下所有可能输入的期望时间(加权平均,需要做一个统计分布假设)
3.最好情况分析(假象):没什么卵用。
取决于机器(比较相对速度,放在同一台机器上运行)
算法大局观!渐近分析
1.忽略掉依赖机器的常量
2.不去检查实际的运行时间,而是关注运行时间如何增长
渐进符号:
θ  弃去低阶项,忽略前面的常数因子
归并排序(过程):
MergeSort A[1...n]
1.If n=i,done
2.递归排序
  A[1...n/2]    and
  A[(n/2)+1...n]
3.归并子序列

对总数为n输入:  Time=θ(n)

麻省理工《算法导论》课程笔记——第1课时_第1张图片

麻省理工《算法导论》课程笔记——第1课时_第2张图片

//归并排序
#include 
#include 
void MergeArray(int *a,int left,int mid,int right)
{
    int temp[100000];
    int x,y,z;
    x=left,y=mid+1,z=0;
    while(x<=mid && y<=right)
    {
        if(a[x]

你可能感兴趣的:(算法导论,C/C++,算法导论,时间复杂度,归并排序,插入排序)