演算法導論第二章筆記
2.1筆記
插入排序程式碼實現,這是按書本的虛擬碼實現的
public static void insertionSort(int[] arr) {
for(int i = 1;i < arr.length;i++) {
int key = arr[i];
int j = i-1;
while(j >= 0 && key < arr[j]) {
arr[j+1] = arr[j];
j--;
}
arr[j+1] = key;
}
}
按自己的理解實現
public static void insertionSort(int[] arr) {
for(int i = 1;i < arr.length;i++) {
int j = i;
while(j >= 1 && arr[j] < arr[j-1]) {
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
j--;
}
}
}
迴圈不變式性質:
初始化:迴圈的第一次迭代之前,它為真。
保持:如果迴圈的某次迭代之前它為真,那麼下次迭代之前它仍為真。
終止:在迴圈終止時,不變式為我們提供了一個有用的性質,該性質有助於證明演算法是正確的。(並且迴圈不變式仍然成立)
2.3筆記
merge sort程式碼實現
public static void combine(int[] arr,int p,int q,int r) {
int n1 = q-p+1;
int n2 = r-q;
int[] arr1 = new int[n1+1];
int[] arr2 = new int[n2+1];
for(int i = 0;i < n1;i++) {
arr1[i] = arr[p+i];
}
for(int j = 0;j < n2;j++) {
arr2[j] = arr[q+1+j];
}
arr1[n1] = Integer.MAX_VALUE;
arr2[n2] = Integer.MAX_VALUE;
int i = 0;
int j = 0;
for(int k = p; k <= r;k++) {
if(arr1[i] <= arr2[j]) {
arr[k] = arr1[i];
i += 1;
}else {
arr[k] = arr2[j];
j += 1;
}
}
}
public static void mergeSort(int[] arr,int p,int r) {
if(p < r) {
int q = (r+p)/2;
mergeSort(arr,p,q);
mergeSort(arr,q+1,r);
combine(arr,p,q,r);
}
}
相關文章
- 《演算法導論》學習筆記演算法筆記
- 演算法導論第二章思考題演算法
- 演算法導論第二章練習演算法
- 計算理論導論筆記筆記
- 演算法·理論:KMP 筆記演算法KMP筆記
- 演算法·理論:Manacher 筆記演算法筆記
- 人工智慧導論學習筆記人工智慧筆記
- 《演算法導論》演算法
- javaSE第二章筆記Java筆記
- 第二章(backup and recovery 筆記)筆記
- 演算法導論 3.1-8 記號擴充套件演算法套件
- 演算法導論-堆排序演算法排序
- 演算法導論-快速排序演算法排序
- 演算法學習筆記(21):數論分塊演算法筆記
- 02142資料結構導論複習筆記資料結構筆記
- 論文筆記筆記
- 圖論筆記圖論筆記
- 群論筆記筆記
- 演算法導論-第6章演算法
- 演算法導論FFT程式碼演算法FFT
- 精靈筆記-第二章:慘叫筆記
- 統一場理論公式推導和筆記——part5公式筆記
- 統一場理論公式推導和筆記——part6公式筆記
- 演算法導論第三十一(31)章數論演算法演算法
- 學演算法要讀《演算法導論》嗎?演算法
- 論文筆記:RankIQA筆記
- Louvain 論文筆記AI筆記
- BERT 論文筆記筆記
- 數論筆記-整除筆記
- 論文筆記(2)筆記
- 信管筆記-- 緒論筆記
- 擬劇論筆記筆記
- 【演算法學習筆記】博弈論淺析之遊戲類演算法筆記遊戲
- 數論學習筆記 (4):擴充套件歐幾里得演算法筆記套件演算法
- 共識演算法論文閱讀筆記1-hotstuff演算法筆記
- 物件導向筆記物件筆記
- 【演算法導論】24.1 Bellman-Ford 演算法演算法
- 《自動機理論、語言和計算導論》閱讀筆記:p1-p4筆記