所以我需要编写一个程序,将两个排序列表合并到一个新的第三个排序列表中,我只能使用 ADT 排序列表的操作。
与我的所有其他任务一样,我从伪代码开始,但今晚我很害怕,无法为此使用一些伪代码。
我已经写了一些指针:创建一个新的排序列表;当两个列表不为空时,删除并比较它们,将其中一个或另一个添加到新列表中。当列表为空时停止(但请考虑当一个列表先为空时会发生什么!)。
非常感谢任何和所有帮助
编辑:让你知道我只是在寻找伪代码帮助而不是实际代码
所以我需要编写一个程序,将两个排序列表合并到一个新的第三个排序列表中,我只能使用 ADT 排序列表的操作。
与我的所有其他任务一样,我从伪代码开始,但今晚我很害怕,无法为此使用一些伪代码。
我已经写了一些指针:创建一个新的排序列表;当两个列表不为空时,删除并比较它们,将其中一个或另一个添加到新列表中。当列表为空时停止(但请考虑当一个列表先为空时会发生什么!)。
非常感谢任何和所有帮助
编辑:让你知道我只是在寻找伪代码帮助而不是实际代码
function merge (lista, listb) {
toReturn = your 'third list'
while lista and listb both still have elements {
if lista's smallest element < listb's smallest element {
add lista's smallest element to toReturn
remove lista's smallest element
} else {
add listb's smallest element to toReturn
remove listb's smallest element
}
}
// if lista has no elements, this loop is skipped
while lista still has elements {
add them to toReturn
}
// if listb has no elements, this loop is skipped
while listb still has elements {
add them to toReturn
}
return toReturn
}
这可以通过使用合并排序的合并过程来完成这是我的 cde,我已经从 main 函数传递了所有 3 个列表
public static void merge(int A[],int A1[],int B1[],int n1,int n2)
{
int a[]=new int[n1+1];
int b[]=new int[n2+1];
for(int k=0;k<n1;k++){
a[k]=A1[k];
}
for(int k=0;k<n2;k++){
b[k]=B1[k];
}
int i=0,j=0;
a[n1]=Integer.MAX_VALUE;
b[n2]=Integer.MAX_VALUE;
for(int k=0;k<A.length;k++){
if(a[i]>b[j]){
A[k]=b[j];
j++;
}
else{
A[k]=a[i];
i++;
}
}
}