Files
Data-Structure/Algorithm/Divide&Conquer/MergeSort.cpp
2025-09-13 22:37:17 +08:00

55 lines
981 B
C++

#include <iostream>
#include <vector>
using namespace std;
void mergeSort(vector<int>& path, int start, int end){
if(start >= end) return;
int mid = (end + start) / 2;
//这里递归分解
mergeSort(path, start, mid);
mergeSort(path, mid + 1, end);
//这里合并,从小到大
vector<int> temp;
int i = start, j = mid + 1;
while(i <= mid && j <= end){
if(path[i] >= path[j]){
temp.push_back(path[j]);
j++;
}
else{
temp.push_back(path[i]);
i++;
}
}
while(i <= mid) temp.push_back(path[i++]);
while(j <= end) temp.push_back(path[j++]);
//直接把调整好的拷贝到原数组即可!!!
for(int x = 0; x < temp.size(); x++){
path[start + x] = temp[x];
}
}
int main(){
vector<int> arr;
int n;
cin >> n;
arr.resize(n);
for(int i = 0; i < n; i++){
cin >> arr[i];
}
mergeSort(arr, 0, arr.size() - 1);
for(int i = 0; i < arr.size(); i++){
if(i) cout << " ";
cout << arr[i];
}
cout << endl;
return 0;
}