void Merge(Type sr[] ,Type tr[] , int i , int m , int n )
{
/*将有序的sr[i..m]和sr[m+1.n]归并到tr[i..n]*/
for(int j = m + 1 , k = i ; i <= m && j<=n ; k++)
{
if(sr[i].key > sr[j].key)
tr[k] = sr[i ++] ;
else
tr[k] = sr[j ++] ;
}
if(i<=m )
tr[k..n] = sr[i..m] ;
if(j<=n )
tr[k..n] = sr[j..n] ;
}
void Msort(Type sr[] , Type tr[] , int s , int t)
{
/*将sr[s..t]归并排序为tr[s..t]*/
if(s==t)
tr[s] = sr[s];
else
{
int m = (s+t) / 2 ;
Msort(sr,tr,s,m);
Msort(sr,tr,m+1,t);
Type tr2[1000] ;
Merge(tr2,tr,s,m,t); //将两个有序的序列归并成一个
}
}
void MergeSort(Sqlist &L)
{
//对顺序表L作归并排序
Msort(L.r,L.r,1,L.lenght);
}
归并排序
最新推荐文章于 2020-11-29 16:31:49 发布