mergesort算法的输出问题

时间:2010-12-18 15:45:39

标签: c# mergesort

这段代码给出了输出,但它有一个问题,即当用户在textbox1中写入5,6而在textbox3中写入7,8时它输出5,6.i知道问题是当数组的元素结束时,它不会打印其他数组的其余元素,我对问题进行了评论。

编辑:我使用textbox1和textbox3来获取用户想要合并的数组的元素

private void button3_Click(object sender, EventArgs e)
{


    string[] source = textBox1.Text.Split(',');
    string[] source1 = textBox3.Text.Split(',');
    int[] nums2 = new int[8];
    int[] nums = new int[source.Length];
    for (int i = 0; i < source.Length; i++)
    {
        nums[i] = Convert.ToInt32(source[i]);

    }
    int[] nums1 = new int[source1.Length];
    for (int j = 0; j < source1.Length; j++)
    {
        nums1[j] = Convert.ToInt32(source1[j]);
    }
    int x = 0;
    int y = 0;
    int z = 0;

    while (x < nums.Length && y < nums1.Length)
    {
        if (nums[x] < nums1[y])
        {
            nums2[z] = nums[x];
            x++;

        }
        else
        {
            nums2[z] = nums1[y];
            y++;
        }

        z++;
    }////----->>it works untill here

    while (x > nums.Length)///this mean when the elements of nums end,out the rest of the elements in other textbox but it doesnt do anything,whats the problem ?
    {
        if (y <= nums1.Length)
        {
            nums2[z] = nums1[y];

            z++;
            y++;
        }
    }
    while (y > nums1.Length)
    {

        if (x <= nums.Length)
        {
            nums2[z] = nums[x];
            z++;
            x++;
        }
    }
        string merge = "";
        foreach (var n in nums2)
            merge += n.ToString() + ",";
        textBox4.Text = merge;


    }

2 个答案:

答案 0 :(得分:1)

while (x > nums.Length)while (y > nums1.Length)的条件都没有意义,因为这绝不会发生。

在之前的块中,只要{em>小于 <{1}}或x,就会增加ynums.Length。因此,这些将永远不会变得更大(最多相等),因此两个条件将始终为假,并且“剩余”项目将不会合并。

请注意,mergesort实现中还有其他问题,但我认为这不在您特定问题的范围内。

答案 1 :(得分:1)

做(删除你的最后一次)

while (x < nums.Length)
{
        nums2[z] = nums[x];
        z++;
        x++;
}

while (y < nums1.Length)
{
        nums2[z] = nums1[y];
        z++;
        y++;
}

因为你不知道哪些数组项目仍然存在,所以你当前的代码也无法正常工作,因为y与nums和vise verse无关。

编辑:我先复制过去,然后复制到第二个,然后修复它,删除最后一个while循环(2个,同时使用if)并替换它。