自写的万能归并排序

在网上搜了一下归并排序的原理后就发现归并排序dfs一下非常好写,于是马上写了个,并且改造了下变成了“万能的”。

虽然还是没有C++ “algorithm”头文件里的sort来得方便,但也算个小成果吧,嘻嘻。


以后不断完善功能:

int lef[MAX/2],righ[MAX/2];
void MER(int *a,int start,int mid,int end,bool(*comp)(void*,void*))
{
    int l1,r1,l2,r2;
    l1 = l2 = r1 = r2 = 0;
    for(int i=start;i=r2||(*comp)((void*)(lef+l1),(void*)(righ+l2))))
            a[i]=lef[l1++];
        else
            a[i]=righ[l2++];
    }
}
bool cmp(void *a,void *b)
{
    return *(int*)a<*(int*)b;
}
void sort(int *a,int l,int r,bool(*comp)(void*,void*) = cmp)
{
    if(r-l==0) return ;
    int mid=(l+r)>>1;
    sort(a,l,mid,comp);
    sort(a,mid+1,r,comp);
    MER(a,l,mid+1,r,comp);
}

//cmp函数可以重载或再写个比较函数传给sort用来对结构体或者其它类型进行排序。
/*
cmp比较函数 格式:
bool cmp(void *a,void *b)
{
	if(a与b满足你的排序要求(例如默认cmp是整型升序排序))
		return true;
	else
		return false;
}
注意要对void型指针进行强制类型转换。
*/


使用格式是sort(数组首地址,排序开始的第一个元素位置,最后一个位置,(可选)比较函数)。

鉴于网上关于归并排序介绍N多,我就不献丑解说原理了。代码仅供参考,各位看官有任何建议或者意见也请告诉我,我好作出修改。

(另外,代码里的MAX是要自己定义个的)

你可能感兴趣的:(各种模板)