循環(huán)不等式:用于幫助驗證算法的正確性,共有三個性質
1初始化:在循環(huán)的第一輪迭代開始前,是正確的
2保持:在循環(huán)的某一次迭代開始前是正確的,在下一次迭代前,也該正確
3終止:循環(huán)結束時,不等式給了我們一個有用的性質,有助于表明算法是正確的
算法步驟:反應出運行時間,主要占用運行時間的是各個循環(huán),遞歸,其重復次數(shù)多,對于單次循環(huán)時間可令為常數(shù)c,c*n則為具體運行時間
(一)插入排序法:部分排好序--單個數(shù)插入,類似迭代(屬于增量法:在排好的數(shù)組中插入,形成新數(shù)組)
插入排序法
算法的步驟為n^2,兩個內(nèi)嵌的for循環(huán)
(二)合并排序法:(屬于分治法:類似遞歸)在每個遞歸,可分為三個步驟
1分解:將原問題分解為一系列子問題
2解決:遞歸的解各個子問題,若子問題夠小,可直接求解
3合并:將子問題的解合并成原問題的解
合并排序法
算法步驟為nlgn:n表示數(shù)據(jù)的個數(shù),lgn表示該數(shù)據(jù)的層數(shù),是為2為底的對數(shù),即遞歸次數(shù)
(三)冒泡法:重復交換相鄰的兩個反序元素
算法步驟:1+2+3.+.......n,所以數(shù)量級為n^2
案例:逆序對,若i<j時,A[i]>A[j],則(i,j)為A中的一個逆序對
子函數(shù),求解兩個有序數(shù)組間的逆序對
通過遞歸將一個數(shù)組不斷細分,再合并
總結:通過循環(huán)不等式可判斷算法是否有錯,通過計算算法的運行時間可判斷該算法的效率
? ? ? ?將求解逆序對的過程轉化成排序問題,降低算法步驟