排序算法
归并算法
给一组无序数组,我们先将它拆分,拆分到最小,然后再两两归并,按照顺序两两归并,最终得到一个有序数组
主要步骤:
- 拍序,通过把其拆分成很小的单元,然后再拍序;
- 连接
void Merge(int* TR2, int* TR1, int start, int m, int end)
{
int i=start;
int j=start+m;
int k=start;
while(i<=m && j<=end)
{
if(TR2[i]<TR2[j])
TR1[k++]=TR2[i++];
else
TR1[k++]=TR2[j++];
}
if(i<=m)
{
for(int l=0; l<=m-i; ++l)
TR1[k+l]=TR2[i+l];
}
if(j<=m)
{
for (int l=0; l<=end-j; ++l)
TR1[k+l]=TR2[j+l];
}
}
void Msort(int* SR, int* TR1, int start, int end, int length)
{
int* TR2=new int[length];
if(start==end)
TR1[start]=SR[start];
else
{
int m=(start+end)/2;//将无序数组一分为二
Msort(SR, TR2, start, m, m-start+1);
Msort(SR, TR2, m+1, end, end-m);
Merge(TR2, TR1, start, m, end);
}
}