?還有一個月就要算法導論考試了,東西很多,想了想就姑且把博客當作筆記。一邊打字,一邊看書,一邊復習。
插入排序雖然在第一章有所提到,然而具體講解的地方是在第二章。
插入排序(INSERTION-SORT)**時間復雜度:平均: O( n2) ? 最壞: O(n) ?最好:O( n2)
空間復雜度:O(1)(因為不需要輔助數組存儲數據)
插入排序思路(結果從小到大)(個人理解):
從第二個元素起,當前元素與前一個元素進行比較。如果比前一個元素小,就兩個元素值相互交換,然后繼續向前比較,直到該元素比前一個元素大為止。(有一點冒泡排序的感覺。。。)之后,第三個元素起,執行上述過程,隨后,直到最后一個元素比較完成,排序結束。
偽代碼:
INSERTION-SORT(A)
for j=2 to A.length
key=A[i]
i=j-1
while i>0
and
A[i]>key
A[i+1]=A[i]
i=i-1
A[i+1]=key
代碼(主體代碼)
for(int j=0;j<x;j++)
{
int key=a[j];
int k=j-1;
while(k>0&&a[k]>key)
{
a[k+1]=a[k];
k=k-1;
a[k+1]=key;
}
}
算法分析:
要計算插入排序的時間復雜度,就是通過得到每條語句的執行時間算總時間
平均情況:
最佳情況(輸入數組已排好序,所以該算法是受輸入序列影響的)
分析
其中,最壞情況可以用 an2+bn+c 表示,也就是n平方級
最好情況是線性的,也就是n級
平均情況,由于其中有求和,而且涉及到n,所以也是n平方級
因此各種情況的時間復雜度就出來了