早教吧 育儿知识 作业答案 考试题库 百科 知识分享

归并算法的C++题目,半个小时内回答给50分!!!急求!!!根据下面将两个有序表合并为一个有序表的算法思想,在sort2.cpp文件中实现函数voidTwoMerge(intA[],ints,intm,inte),将有序表A[s]~A[m]

题目详情
归并算法的C++题目,半个小时内回答给50分!!!急求!!!
根据下面将两个有序表合并为一个有序表的算法思想,在sort2.cpp文件中实现函数void TwoMerge(int A[],int s,int m,int e),将有序表A[s]~A[m]和A[m+1]~A[e]合并为一个有序表A[s] ~A[e]。并在主函数中对数组B_1[]={36,49,52,75, 80,14,23,58,61,97}调用函数TwoMerge(B_1,0,4,9);将B_1中两个有序序列(0~4)和(5~9)的数据合并为一个有序序列。
a.从数组A[s]~A[m]和A[m+1]~A[e]中各取一最小数
b.比较取出的两个数,将较小数按顺序放入数组临时数组R中
c.从较小数对应的数组中取出下一个最小数
d.重复步骤b、c直到两个序列中的数据全部取走
e.如果s~m或m+1~e有未取走的数据,则将剩下的数全部按顺序拷贝到R中已加入的数据后
f.将R中数据逐一拷贝回A中
▼优质解答
答案和解析
#include
using namespace std;
void TwoMerge(int A[], int s, int m, int e)
{
int R[100];
int k = s;
int begin1 = s;
int end1 = m;
int begin2 = m + 1;
int end2 = e;
while(k <= e )
{
if(begin1 > end1)
R[k++] = A[begin2++];
else if(begin2 > end2)
R[k++] = A[begin1++];
else
{
if(A[begin1] <= A[begin2])
R[k++] = A[begin1++];
else
R[k++] = A[begin2++];
}
}
int i;
for(i=s;i<=e;i++)
A[i]=R[i];

}
int main()
{
int B_1[]={36,49,52,75, 80,14,23,58,61,97};
TwoMerge(B_1,0,4,9);
int i;
for(i=0;i<=9;i++)
cout< system("pause");
}