9️⃣ 归并排序
#include <iostream>
#include <vector>
using namespace std;
void Merge(vector<int> &a, int left, int mid, int right){
if(left<mid&&mid<right){
Merge(a,left,(left+mid)/2,mid);
Merge(a,mid,(mid+right)/2,right);
}
int i=left, j=mid, k=0;
int* temp = new int[right-left+1];
while(i<mid&&j<right){
if(a[i]<a[j])
temp[k++] = a[i++];
else temp[k++] = a[j++];
}
while(i!=mid)
temp[k++] = a[i++];
while(j!=right)
temp[k++] = a[j++];
for(int i=left, k=0; i<right; i++, k++)
a[i] = temp[k];
delete []temp;
}
void MergeSort(vector<int> &a){
Merge(a, 0, a.size()/2, a.size());
}
int main(){
vector<int> a{3,6,0,7,1,9,9,7,10,3,4,5,6,4};
MergeSort(a);
for (int i=0; i!=a.size(); i++)
cout << a[i] << " ";
return 0;
}