閒着無事,重新複習了一下歸併排序。
總體上也就是二分+合併的過程,在合併的過程中排序即可。
想看的話,這篇博客有詳細的圖文解釋(不過是Java的):https://www.jianshu.com/p/33cffa1ce613
自己用C寫了一個歸併的例子,直接放代碼:
#include<bits/stdc++.h> using namespace std; const int maxn = 10; int a[maxn]; void merge(int a[], int l, int mid, int r) { int temp[55]; int p1 = l; int p2 = mid + 1; int k = 0; while (p1 <= mid&&p2 <= r) temp[k++] = a[p1] < a[p2] ? a[p1++] : a[p2++]; while (p1 <= mid) temp[k++] = a[p1++]; while (p2 <= r) temp[k++] = a[p2++]; for (int i = 0; i < k; i++) a[l + i] = temp[i]; } void Sort(int a[], int l, int r) { if (l == r) return; int mid = (l + r) / 2; Sort(a, l, mid); Sort(a, mid + 1, r); merge(a, l, mid, r); } int main() { //freopen("C://input.txt", "r", stdin); for (int i = 0; i <= maxn; i++) { a[i] = maxn - i; } Sort(a,0,maxn); for (int i = 0; i <= maxn; i++) { cout << a[i] << endl; } return 0; }
歸併排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.