classSolution{public:vector<int>sortArray(vector<int>&nums){mergeSort(nums,0,nums.size()-1);returnnums;}private:voidmergeSort(vector<int>&A,intl,intr){if(l>=r)return;constintm=(l+r)/2;mergeSort(A,l,m);mergeSort(A,m+1,r);merge(A,l,m,r);}voidmerge(vector<int>&A,intl,intm,intr){vector<int>sorted(r-l+1);intk=0;// sorted's indexinti=l;// left's indexintj=m+1;// right's indexwhile(i<=m&&j<=r)if(A[i]<A[j])sorted[k++]=A[i++];elsesorted[k++]=A[j++];// Put possible remaining left part to the sorted arraywhile(i<=m)sorted[k++]=A[i++];// Put possible remaining right part to the sorted arraywhile(j<=r)sorted[k++]=A[j++];copy(begin(sorted),end(sorted),begin(A)+l);}};
classSolution{publicint[]sortArray(int[]nums){mergeSort(nums,0,nums.length-1);returnnums;}privatevoidmergeSort(int[]A,intl,intr){if(l>=r)return;finalintm=(l+r)/2;mergeSort(A,l,m);mergeSort(A,m+1,r);merge(A,l,m,r);}privatevoidmerge(int[]A,intl,intm,intr){int[]sorted=newint[r-l+1];intk=0;// sorted's indexinti=l;// left's indexintj=m+1;// right's indexwhile(i<=m&&j<=r)if(A[i]<A[j])sorted[k++]=A[i++];elsesorted[k++]=A[j++];// Put possible remaining left part to the sorted arraywhile(i<=m)sorted[k++]=A[i++];// Put possible remaining right part to the sorted arraywhile(j<=r)sorted[k++]=A[j++];System.arraycopy(sorted,0,A,l,sorted.length);}}
classSolution:defsortArray(self,nums:List[int])->List[int]:defmergeSort(A:List[int],l:int,r:int)->None:ifl>=r:returndefmerge(A:List[int],l:int,m:int,r:int)->None:sorted=[0]*(r-l+1)k=0# sorted's indexi=l# left's indexj=m+1# right's indexwhilei<=mandj<=r:ifA[i]<A[j]:sorted[k]=A[i]k+=1i+=1else:sorted[k]=A[j]k+=1j+=1# Put possible remaining left part to the sorted arraywhilei<=m:sorted[k]=A[i]k+=1i+=1# Put possible remaining right part to the sorted arraywhilej<=r:sorted[k]=A[j]k+=1j+=1A[l:l+len(sorted)]=sortedm=(l+r)//2mergeSort(A,l,m)mergeSort(A,m+1,r)merge(A,l,m,r)mergeSort(nums,0,len(nums)-1)returnnums