这段代码应该像合并排序算法一样工作,但它不起作用并给出输出0而不是排序数字,问题是什么朋友?谢谢
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++;
}
while (x > nums.Length){
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;
}
答案 0 :(得分:1)
要完全获得输出,请尝试
string merge="";
foreach(var n in nums2)
merge+=n.ToString() + " ";
textBox4.Text = merge;
(好吧,使用Linq&amp; String.Join或StringBuilder可以更快/更好/更好地完成,但出于测试目的,这应该足够了。)
也许这并不能解决上面代码的所有问题,但它可能会帮助您更轻松地调试它。
答案 1 :(得分:1)
该行
if (y > nums1.Length-1)
不应该在里面
if (x > nums1.Length-1)
因为你想测试每个条件。如果您因while
而退出第一个x >= nums.Length - 1
循环,则您希望确保自己也运行y
直到结束。
答案 2 :(得分:1)
通过LINQ
可以更容易地实现逻辑var numA = new int[]{...};
var numB = new int[]{...};
var result = numA.Union(numB).OrderBy(num => num); // add .Distinct() if you like