如何在MIPS中合并排序排序列表?

时间:2015-03-17 23:09:34

标签: assembly mips mergesort

所以我需要使用MIPS汇编语言来修改程序。我的指示如下:

  

写一个"合并"将两个有序整数列表合并为一个新的有序列表的程序   例如,给定两个有序列表(9,6,4,1)和(7,3,2,0)作为输入参数," merge"应该产生一个新的清单(9,7,6,4,3,2,1,0),也是订购的。另一个例子可能是合并(6,0,-3)和(9,5,4,0,-2)以产生(9,6,5,4,0,0,-2,-3)。 / p>      

"合并"程序假定整数的两个输入列表(按降序排列)存储在数据区中。它加载整数并将它们合并到一个有序列表中。生成的有序列表(例如(9,6,5,4,0,0,-2,-3))应存储回数据区。

     

您可以根据自己的选择安排数据区域(即列表),以及将结果列表覆盖到原始的两个列表上。但一定要提供有意义的标签,并清楚地指出(使用标签或注释)存储合并列表的位置。在程序终止之前,它应该打印出合并列表,该列表应按递减顺序排列。

     

注意:请不要实施任何排序算法!如果你这样做,你将获得零(0)等级。

*我认为这里的说明真的不清楚。我不确定是否应该提供列表或假设这些列表已经存在。任何示例或建议/程序都会有很大帮助!

1 个答案:

答案 0 :(得分:0)

根据需要,可怕的Java中的一个例子:

import java.util.*;
class merge {

// Data Area

//static LinkedList list1 = new LinkedList(Arrays.asList(9,6,4,1));
//static LinkedList list2 = new LinkedList(Arrays.asList(7,3,2,0));
static LinkedList list1 = new LinkedList(Arrays.asList(6,0,-3));
static LinkedList list2 = new LinkedList(Arrays.asList(9,5,4,0,-2));
static LinkedList list3 = new LinkedList();

// Code Area

public static void main(String[] args)
{
    ListIterator<Integer> list1Iterator = list1.listIterator();
    ListIterator<Integer> list2Iterator = list2.listIterator();

    Integer i1 = list1Iterator.next();
    Integer i2 = list2Iterator.next();

    while (true)            // endless, breaks when one of the list reaches its end
    {
        if (i1 > i2)
        {
            list3.add(i1);
            if (list1Iterator.hasNext())
            {
                i1 = list1Iterator.next();
            }
            else            // no element left in list1, fill list3 with the rest of list2 and break
            {
                list3.add (i2);
                while (list2Iterator.hasNext())
                {
                    list3.add(list2Iterator.next());
                }
                break;
            }
        }
        else
        {
            list3.add(i2);
            if (list2Iterator.hasNext())
            {
                i2 = list2Iterator.next();
            }
            else            // no element left in list2, fill list3 with the rest of list1 and break
            {
                list3.add (i1);
                while (list1Iterator.hasNext())
                {
                    list3.add(list1Iterator.next());
                }
                break;
            }
        }
    }

    System.out.println (list3);
}

} // class merge