0

所以我需要编写一个程序,将两个排序列表合并到一个新的第三个排序列表中,我只能使用 ADT 排序列表的操作。

与我的所有其他任务一样,我从伪代码开始,但今晚我很害怕,无法为此使用一些伪代码。

我已经写了一些指针:创建一个新的排序列表;当两个列表不为空时,删除并比较它们,将其中一个或另一个添加到新列表中。当列表为空时停止(但请考虑当一个列表先为空时会发生什么!)。

非常感谢任何和所有帮助

编辑:让你知道我只是在寻找伪代码帮助而不是实际代码

4

2 回答 2

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

}
于 2012-10-11T07:08:17.510 回答
0

这可以通过使用合并排序的合并过程来完成这是我的 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++;      
            }
        }

    }
于 2017-02-22T13:27:57.793 回答