618買了本算法導論,考完試10號,旅遊完回來15號,又出去聚會了兩天,終於開始學習了= =
第一個算法就是這個插入排序,道理很簡單,後一個數和前一個數比較大小,交換順序,最終按大小排好順序。下面放一張原理圖:
上圖中還給出了僞代碼,而後我稍做修改,用c寫出了這個程序:算法
#include<stdio.h> void InsertionSort(int []); int main() { int a[5], i; for(i = 0; i < 5; i++) { scanf("%d", &a[i]); } InsertionSort(a); for(i = 0; i < 5; i++) { printf("%d ", a[i]); } printf("\n"); return 0; } void InsertionSort(int num[]) { int j, k, key; for(j = 1; j < 5; j++) { key = num[j]; k = j - 1; while(k >= 0 && num[k] > key) { num[k + 1] = num[k]; k = k - 1; } num[k + 1] = key; } }
測試結果以下:
在代碼的第26行,把 num[k] > key 改爲 num[k] < key 就能實現降序排序。
再說一下循環不變式,它的三個性質:初始化、保持、終止,能夠幫助判斷算法的正確與否。
保持這一性質是判斷算法是否正確很關鍵一點,要保證每次迭代時 A[j] 以前的數已經排好序。
這個插入排序仍是挺簡單的,容易理解並且代碼量少,後面就要學分析算法,看的一臉懵逼。這本書估計大四都學不完了orz
爭取3天更一次博學習