#include <iostream>using namespaceStdvoidMergeint* Arr,int* Reg,intStartintEnd) {if(Start >= end)return;intleft = start;intright = end;intMid = (left + right)/2; Merge (arr, Reg, left, mid); Merge (arr, Reg, Mid +1, right);intStart1 = left;intStart2 = mid +1;intResidx = left; while(Start1 <= mid && Start2 <= right) {reg[residx++] = Arr[start1] < Arr[start2]? arr[start1++]: arr[start2++]; } while(Start1 <= mid) {reg[residx++] = arr[start1++]; } while(Start2 <= right) {reg[residx++] = arr[start2++]; } for(Residx = start; residx <= end; residx++) {ARR[RESIDX] = Reg[residx]; }}voidMergeSort (int* Arr,int* Reg,Const intSize) {merge (arr, Reg,0, Size-1);}intMain () {intSize, I; CIN >> size;int*arr =New int[Size]; for(i =0; i < size; i++) {cin >> arr[i]; }int*reg =New int[Size]; MergeSort (arr, Reg, size); cout << Endl; cout <<"Result:"<< Endl; for(i =0; i < size; i++) {cout << arr[i] <<" "; } cout << Endl;Delete[] arr;Delete[] reg;return 0;}
Merge sort (non-in-place version)