插入排序的思想是構造乙個迴圈不變式,可用撲克牌的例子來解釋,左手為已經排好序的牌,右手為未排好序的牌,分別將右手中的牌依次一張一張地插入到左手,將左手中的每一張牌依次和這張牌比較,以此來確定這張牌在左手中的正確順序,然後進行下一張牌,在這個過程中,左手中的牌始終是排好序的,即不變的,——稱為迴圈不變式
初始:左手中只有一張牌,是排好序的
保持:依次將左手中的牌插入適當位置,保持左手排好序
終止:當右手中的牌全部到左手中
初始時:只有1,已經排好序
保持:while(i>=1&&a[i]>key)
a[i+1]=a[i]//右移
i--;
a[i+1]=key;//插入
已經跑過的**如下
#define n 10intmain()
a[i+1]=key;
}for(i=0;i)
return0;
}
插入排序與迴圈不變式
首先,給出本文要使用的例子,對乙個陣列a進行公升序的插入排序 演算法的c語言描述 cpp view plain copy void insersort inta,intlength a j 1 key 迴圈不變式是用於檢驗演算法的正確性的。在演算法中,有一些特定的性質 也是我們我們實現這個演算法最關...
演算法基礎 使用迴圈不變式解決插入排序問題
思想是直接插入排序,即每次拿乙個數字向已排序好的數字中插入,採用迴圈不變式的設計思想。迴圈不變式 一般而言,用這個式子表示希望得到的結果,如果在迴圈的每一步,這個式子都是正確的,那麼迴圈結束後,這個式子也正確,並得到了期望的結果。如何證明迴圈的每一步式子都是正確的?需要證明式子滿足三個性質 初始化 ...
《演算法導論》讀書筆記(一) 插入排序與迴圈不變式
第一次學習 演算法導論 按照讀書的順序將一些心得記錄下來 include using namespace std void insert sort int a,int length int main insert sort a,n for int i 0 i n i cout endl return...