【归并排序】算法实现
i:开始合并时第一个序列的起始位置;
s:合并前序列的大小;
t:合并后序列的大小
i、i+s-1、i+t-1定义被合并的两个序列的边界。
//代码实现
//应用上篇随笔的合并算法,实现数组排序
/********************************************************************/
/************************【归并排序算法】******************************/
/********************************************************************/
void sort_merge(int array[],int size)
{
int i;//开始合并时的第一个序列的起始位置
int s;//合并前序列的大小
int t = 1;//合并后序列的大小
while(t<size)
{
i=0;
s=t;
t=2*s;
while((i+t)<size)
{
merge(array,i,i+s-1,i+t-1,t);//见 上篇随笔中的合并两个子顺序数组算法
i=i+t;
}
if(i+s<size)
{
merge(array,i,i+s-1,size-1,size-i);
}
}
运行结果:
算法的时间复杂度为:O(nlogn);
空间复杂度为:O(n);