提交时间:2025-05-27 15:32:29
运行 ID: 193919
#include <iostream> #include <vector> using namespace std; void mergeSort(vector<int>& arr, int left, int right) { if (left >= right) return; int mid = left + (right - left) / 2; mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); // 合并两个已排序的子数组 vector<int> temp(right - left + 1); int i = left, j = mid + 1, k = 0; while (i <= mid && j <= right) { if (arr[i] <= arr[j]) { temp[k++] = arr[i++]; } else { temp[k++] = arr[j++]; } } // 复制剩余元素 while (i <= mid) temp[k++] = arr[i++]; while (j <= right) temp[k++] = arr[j++]; // 将临时数组复制回原数组 for (int p = 0; p < temp.size(); ++p) { arr[left + p] = temp[p]; } } int main() { int n; cin >> n; vector<int> arr(n); for (int i = 0; i < n; ++i) { cin >> arr[i]; } mergeSort(arr, 0, n - 1); for (int i = 0; i < n; ++i) { cout << arr[i]; if (i < n - 1) cout << " "; } cout << endl; return 0; }