#include #include using namespace std; void mergeSort(vector& path, int start, int end){ if(start >= end) return; int mid = (end + start) / 2; //这里递归分解 mergeSort(path, start, mid); mergeSort(path, mid + 1, end); //这里合并,从小到大 vector 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 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; }