原理
归并序的基本思想:
取中间下标
递归
合并: 分成两个数组
把数组中小的存到零时数组中
把临时数组存回目标数组中
实现
public static void merge_sort(int q[],int l,int r){
if(l>=r) return;
//找中间值
int mid = (r+l)>>1;
//递归
merge_sort(q,l,mid);
merge_sort(q,mid+1,r);
//合并
int i = l,j = mid+1, k = 0;
while(i<=mid && j<=r){
if(q[i]<=q[j])tmp[k++] = q[i++];
else tmp[k++] = q[j++];
}
while(i<=mid)tmp[k++] = q[i++];
while(j<=r)tmp[k++] = q[j++];
for(i=l,k=0;i<=r;i++,k++) q[i]=tmp[k];
}