#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;
}
归并排序(面试手写版)
最新推荐文章于 2022-03-10 21:17:08 发布