本文主要是介绍算法导论第2章—算法基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2.1 插入排序
#include<iostream>using namespace std;
void Insertion_Sort(int *A,int n); //声明
void Print(int *A,int n);void Insertion_Sort(int *A,int n){for(int j=1;j<n;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;}
}void Print(int *A,int n){for(int i=0;i<6;i++)cout<<A[i]<<" ";cout<<endl;
}int main(){int A[]={5,2,4,6,1,3};int n=sizeof(A)/sizeof(A[0]);Insertion_Sort(A,n);Print(A,n);return 0;
}
循环不变式
循环不变式主要用来帮助我们理解算法的正确性。必须证明三条性质:
初始化:循环的第一次迭代之前,它为真。
保持:如果循环的某次迭代之前它为真,那么下次迭代之前它仍为真。
终止:在循环终止时,不变式为我们提供一个有用的性质,该性质有助于证明算法是正确的。
2.2 分析算法
2.3 设计算法
归并排序:
#include<iostream>using namespace std;
const int NIL=100000000;
void Merge(int *A,int p,int q,int r);
void Merge_Sort(int *A,int p,int r);
void Print(int *A,int p,int r);void Merge(int *A,int p,int q,int r){int n1=q-p+1;int n2=r-q;int L[100],R[100];for(int i=0;i<n1;i++)L[i]=A[p+i];for(int j=0;j<n2;j++)R[j]=A[q+j+1];L[n1]=NIL;R[n2]=NIL;int i=0,j=0;for(int k=p;k<=r;k++){if(L[i]<=R[j]){A[k]=L[i];i=i+1;}else{A[k]=R[j];j=j+1;}}
}void Merge_Sort(int *A,int p,int r){if(p<r){int q=(p+r)/2;Merge_Sort(A,p,q);Merge_Sort(A,q+1,r);Merge(A,p,q,r);}
}void Print(int *A,int p,int r){for(int i=p;i<=r;i++)cout<<A[i]<<" ";cout<<endl;
}int main(){int A[]={0,0,0,0,0,0,0,0,0,2,4,5,7,1,2,3,6,0,0};Merge_Sort(A,9,16);Print(A,9,16);return 0;
}
这篇关于算法导论第2章—算法基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!