您的位置:首页 > 其它

归并排序

2014-05-26 16:38 113 查看
归并排序也是一种递归分治的思想,对数组S排序的基本思路如下:

1.如果S元素个数小于等于1,返回

2.根据下标平均分成两个数组S1、S2

3.递归将S1、S2排序

4.将排序好的S1、S2进行merge,具体代码见下文

实现代码:

void merge(int a[], int temp[], int l, int h)
{
int m = (l + h)/2;
int i = l,j = m+1,k = l;

while(i < m+1 && j < h+1)
{
if(a[i] < a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while(i < m+1)
temp[k++] = a[i++];
while(j < h+1)
temp[k++] = a[j++];

for(int i = l; i < h + 1; i++)
a[i] = temp[i];
}

void mergesort(int a[], int temp[], int l, int h)
{
if(l < h)
{
int m = (l + h)/2;
mergesort(a,temp,l,m);
mergesort(a,temp,m+1,h);
merge(a,temp,l,h);
}
}

void Msort(int a[], int n)
{
int *p = new int
;
mergesort(a,p,0,n-1);
delete []p;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: