Python
def merge_sort(lst):
if(len(lst) <= 1): return lst
left = merge_sort(lst[:int(len(lst)/2)])
right = merge_sort(lst[int(len(lst)/2):len(lst)])
result = []
while len(left) > 0 and len(right)> 0:
if( left[0] > right[0]):
result.append(right.pop(0))
else:
result.append(left.pop(0))
if(len(left)>0): result.extend(merge_sort(left))
else: result.extend(merge_sort(right))
return result
C/C++
void merge_sort(int *A,int x,int y,int *T)
{
if(y-x>1)
{
int m=x+(y-x)/2;
int p=x,q=m,i=x;
merge_sort(A,x,m,T);
merge_sort(A,m,y,T);
while(p<m||q<y)
{
if(q>=y||(p<m&&A[p]<=A[q]))
T[i++]=A[p++];
else T[i++]=A[q++];
}
for(i=x;i<y;i++)
A[i]=T[i];
}
}