#include <iostream> #include <vector> using namespace std; void merge(vector<int>& A, vector<int> L, vector<int> R) { int l = L.size(); int r = R.size(); int i = 0; int j = 0; int k = 0; while(i < l && j < r) { if(L[i] < R[j]) { A[k++] = L[i++]; } else { A[k++] = R[j++]; } } while(i < l) A[k++] = L[i++]; while(j < r) A[k++] = R[j++]; } void mergesort(vector<int>& arr) { int n = arr.size(); if(n < 2) return; int mid = n/2; int i; vector<int> L(mid); vector<int> R(n - mid); for(i = 0; i < mid; ++i) { L[i] = arr[i]; } for(;i < n; ++i) { R[i-mid] = arr[i]; } mergesort(L); mergesort(R); merge(arr, L, R); } int main() { int arr[10] = {2, 5, 4, 3, 1, 6, 8, 9, 7, 0}; vector<int> Arr(arr, arr + 10); for(int i = 0; i < 10; ++i) cout << Arr[i] << " "; cout << endl; mergesort(Arr); for(int i = 0; i < 10; ++i) cout << Arr[i] << " "; return 0; }
归并排序(面试手写版)
猜你喜欢
转载自blog.csdn.net/nichchen/article/details/80198743
今日推荐
周排行