#includeusing namespace std; // 合并 void merge(int arr[], int tempArr[], int left, int mid, int right) { // 标记左半区第一个元素 int l_pos = left; // 标记右半区第一个元素 int r_pos = mid + 1; // 临时数组元素的下标 int pos = left; // 有序归并 while (l_pos <= mid && r_pos <= right) { if (arr[l_pos] < arr[r_pos]) tempArr[pos++] = arr[l_pos++]; else tempArr[pos++] = arr[r_pos++]; } while (l_pos <= mid) tempArr[pos++] = arr[l_pos++]; while (r_pos <= right) tempArr[pos++] = arr[r_pos++]; // 把临时数组中合并后的元素复制回原来的数组 while (left <= right) { arr[left] = tempArr[left]; left++; } } // arr原数组,tempArr辅助数组,left左边界,right右边界 void merge_sort(int arr[], int tempArr[], int left, int right) { // 若只有一个元素,不需要归并排序 if (left == right) return; // 中间点 int mid = (left + right) / 2; // 对左半部分进行归并排序 merge_sort(arr, tempArr, left, mid); // 对右半部分进行归并排序 merge_sort(arr, tempArr, mid + 1, right); // 合并已经排序的部分 merge(arr, tempArr, left, mid, right); } int main() { int N = 10; int TEST[] = {3,8,1,9,2,11,15,22,0,87}; for (int i : TEST) cout << i << " "; cout << endl; int tempArr[N]; // 对TEST归并排序 merge_sort(TEST, tempArr, 0, N - 1); for (int i : TEST) cout << i << " "; return 0; }



