算法-归并排序
时间复杂度(nlogn)
归并排序是用分治思想,分治模式在每一层递归上有三个步骤:
- 分解(Divide):将n个元素分成个含n/2个元素的子序列。
- 解决(Conquer):用合并排序法对两个子序列递归的排序。
- 合并(Combine):合并两个已排序的子序列已得到排序结果。
void merge_sort(int q[],int l,int r)
{if(l>=r) return;int mid=(l+r)>>1;merge_sort(q,l,mid);merge_sort(q,mid+1,r);int tmp[q_max],i=l,j=mid+1,len=0;while(i<=mid&&j<=r){if(q[i]<=q[j]) tmp[len++]=q[i++];else tmp[len++]=q[j++];}while(i<=mid) tmp[len++]=q[i++];while(j<=r) tmp[len++]=q[j++];for(i=l,j=0;i<=r;i++,j++) q[i]=tmp[j];
}