归并排序 #include<iostream> #include<vector> using namespace std; void merge(vector<int> &arr, int left, int mid, int right){ int i = left; int j = mid + 1; vector<int> tmp(right - left + 1); int k = 0; while(i <= mid && j <= right){ if(arr[i] < arr[j]) tmp[k++] = arr[i++]; else tmp[k++] = arr[j++]; } while(i <= mid) tmp[k++] = arr[i++]; while(j <= right) tmp[k++] = arr[j++]; for(int p = left; p <= right; ++p){ arr[p] = tmp[p - left]; } } void mergeSort(vector<int> &arr, int left, int right){ if(left < right){ int mid = left + (right - left) / 2; mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); merge(arr, left, mid, right); } } int main(){ vector<int> arr{10, 9, 7, 8, 6, 5, 2, 4, 3, 1}; mergeSort(arr, 0, arr.size() - 1); for(auto each : arr) cout << each << " "; cout << endl; return 0; }