55 lines
981 B
C++
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;
|
|
}
|