文章目录
归并排序
归并排序
(merge sort)是高效的
基于比较的稳定排序
算法。
1.归并排序的复杂度分析
归并排序的时间复杂度
为 O ( n l o g n ) O(nlogn) O(nlogn)
归并排序的空间复杂度
是 O ( n ) O(n) O(n)(这是因为他不是原地排序算法
)
2.细节解释
( l + r ) > > 1 = ( l + r ) ÷ 2 1 = ( l + r ) ÷ 2 (l+r)>>1=(l+r)\div 2^{1}=(l+r)\div 2 (l+r)>>1=(l+r)÷21=(l+r)÷2;
3.归并排序动图演示
在这里我们是默认
了它以中间为节点
,分别
排成了从大到小
的两个序列
的
这是因为有merge_sort(q,l,mid),merge_sort(q,mid+1,r)
来不断
进行拆分
的原因
3(1) 我们的拆分过程如下↓
这里的动图演示
,先执行了
下方代码
int k=0,i=l,j=mid+1;//i表示左半边的开始,j表示右半边的开始,k表示合并的个数
while(i<=mid&&j<=r){
//对半分后,mid是i的终点,r是j的终点
if(q[i]<=q[j]) tmp[k++]=q[i++];//不断将tmp填充,i++
else tmp[k++]=q[j++];//else 等同于if(q[i]>q[j])
}
当q[i]
和q[j]
已经超过了
他们的终点
(i
的终点
是mid
,j
的终点
是r
),那么就执行下方代码
while