演算法導論第2章 演算法基礎

2021-06-23 04:01:05 字數 810 閱讀 6867

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...