基本概念
递归排序,分到很小再按序合并 - 稳定的 有特性为,当两个数等大,每次归并时,这两个数的前后顺序不变 - 时间复杂度 每步递归处理n个 ,每次均分共递归 次 一共
实现
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 i = l, j = mid + 1, k = 0; //用k来记录存下的数,只是更方便
while(i <= mid && j <= r)
{
if(q[i] < q[j])
t[k ++] = q[i ++];
else
t[k ++] = q[j ++];
}
while(i <= mid) t[k ++] = q[i ++];
while(j <= r) t[k ++] = q[j ++];
for(int i = l, j = 0; i <= r; i ++, j ++)
q[i] = t[j];
}