将已排序的列表合并到新列表中

时间:2012-10-10 03:00:07

标签: recursion pseudocode sortedlist

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

与我的所有其他任务一样,我从伪代码开始,但今晚我正处于一个恐惧状态,并且不能为此考虑一些假代码。

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

非常感谢任何和所有帮助

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

2 个答案:

答案 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++;      
            }
        }

    }