2.1 插入排序
#includeusing namespace std;
void insertion_sort(int *a,int n); //宣告
void print(int *a,int n);
void insertion_sort(int *a,int n)
a[i+1]=key; }}
void print(int *a,int n){
for(int i=0;i<6;i++)
cout<
迴圈不變式
迴圈不變式主要用來幫助我們理解演算法的正確性。必須證明三條性質:
初始化:迴圈的第一次迭代之前,它為真。
保持:如果迴圈的某次迭代之前它為真,那麼下次迭代之前它仍為真。
終止:在迴圈終止時,不變式為我們提供乙個有用的性質,該性質有助於證明演算法是正確的。
2.2 分析演算法
2.3 設計演算法
歸併排序:
#includeusing 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
《演算法導論》第2章 演算法基礎
學習內容 演算法 尤其是遞迴演算法 複雜度的計算方法 證明演算法正確性的三個步驟 雖然我沒有怎麼弄清楚 幾個排序演算法的實現與比較 插入排序 include using namespace std int a 6 int main a i 1 key 此時a i 為第乙個不比key大的元素 for ...
《演算法導論》第2章 演算法基礎 個人筆記
insertion sort a for j 2 to a.length key a j i j 1 while i 0 anda i key a i 1 a i i a i 1 key 在insertion sort中,若輸入陣列已排好序,則出現最佳情況,t n n 若輸入陣列已反向排序,則導致最...
《演算法導論》筆記 第2章
本章出現了全書第乙個演算法 插入排序。插入排序並不是最直觀的排序演算法,拿它做第乙個講解應該有其他的理由。通過插入排序的講解,偽 約定 迴圈不變式 演算法分析等最基礎的知識被帶了出來。此後又講了第二個演算法 合併排序,並引出了演算法設計中的兩種常見型別 增量法 incremental 和分治法 di...