归并排序
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;
}
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;
}
相关文章推荐