// 将前后两个相邻有序表归并为一个有序表,设两段有序表A[low..mid]、A[mid+1..high]存放在同一个有序表的相邻位置,先将他们复制到辅助数组B中,
// 每次从对应B中的两个段取出一个记录进行关键字的比较,将较小者放入A中,当数据B中有一段的下标超出其对应的表长(
// 即该段段所有元素都已复制到A中)时,将另一段中的剩余部分直接复制到A中
Elemtype *B=(Elemtype *)malloc((n+1)*sizeof(Elemtype)) // 构建辅助数组B
void Merge(Elemtype A[], int low, int mid, int high)
{
for(int k=low;k<=high;k++)
B[k]=A[k] // 将A中所有元素复制到B中
for(i=low,j=mid+1,k=i;i<=mid&&j<=high;k++){
if(B[i]<=B[j]) // 比较B中左右两段的元素
A[k]=B[i++] // 将较小值复制到A中
else
A[k]=B[j++]
}
while(i<=mid) A[k++]=B[i++]; // 将剩余的元素进行追加
while(j<=high) A[k++]=B[j++];
}
void MergeSort(Elemtype A[],int low,int high)
{
if(low<high){
int(low<high){
int mid=(low+high)/2;
MergeSort(A,low,high)
MergeSort(A,mid+1,high)
MergeSort(A,low,mid,high);
}
}
}
数据结构算法C实现(二路归并排序算法)
最新推荐文章于 2022-11-15 01:27:01 发布