def merge_sort(arr):
if len(arr)<=1: return arr
mid=len(arr)//2
l=merge_sort(arr[:mid]); r=merge_sort(arr[mid:])
res=[]; i=j=0
while i<len(l) and j<len(r):
if l[i]<=r[j]: res.append(l[i]); i+=1
else: res.append(r[j]); j+=1
return res+l[i:]+r[j:]
public int[] mergeSort(int[] arr){
if(arr.length<=1) return arr;
int mid=arr.length/2;
int[] l=mergeSort(Arrays.copyOfRange(arr,0,mid));
int[] r=mergeSort(Arrays.copyOfRange(arr,mid,arr.length));
int[] res=new int[arr.length]; int i=0,j=0,k=0;
while(i<l.length&&j<r.length) res[k++]=l[i]<=r[j]?l[i++]:r[j++];
while(i<l.length) res[k++]=l[i++];
while(j<r.length) res[k++]=r[j++];
return res;
}
Python slicing trivial. Java needs Arrays.copyOfRange(). res+l[i:] vs explicit loops.
def merge_sort(arr):
if len(arr)<=1: return arr
mid=len(arr)//2
l=merge_sort(arr[:mid]); r=merge_sort(arr[mid:])
res=[]; i=j=0
while i<len(l) and j<len(r):
if l[i]<=r[j]: res.append(l[i]); i+=1
else: res.append(r[j]); j+=1
return res+l[i:]+r[j:]
public int[] mergeSort(int[] arr){
if(arr.length<=1) return arr;
int mid=arr.length/2;
int[] l=mergeSort(Arrays.copyOfRange(arr,0,mid));
int[] r=mergeSort(Arrays.copyOfRange(arr,mid,arr.length));
int[] res=new int[arr.length]; int i=0,j=0,k=0;
while(i<l.length&&j<r.length) res[k++]=l[i]<=r[j]?l[i++]:r[j++];
while(i<l.length) res[k++]=l[i++];
while(j<r.length) res[k++]=r[j++];
return res;
}
1. Split 2. Recurse both halves 3. Merge