所以我需要编写一个程序,将两个已排序的列表合并到一个新的第三个排序列表中,我只能使用ADT排序列表的操作。
与我的所有其他任务一样,我从伪代码开始,但今晚我正处于一个恐惧状态,并且不能为此考虑一些假代码。
我写了一些指示:创建一个新的排序列表;当两个列表不为空时删除并比较它们,将一个或另一个添加到新列表中。列表为空时停止(但要考虑当一个列表在另一个列表之前变为空时会发生什么!)。
非常感谢任何和所有帮助
编辑:让你知道我只是在寻找Pseudocode帮助而不是实际的代码
答案 0 :(得分:0)
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
}
答案 1 :(得分:0)
这可以通过使用合并排序的合并过程来完成 这是我的cde,我从主要功能
通过了所有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++;
}
}
}