线性搜索问题
Posted
技术标签:
【中文标题】线性搜索问题【英文标题】:Linear Search Problem [closed] 【发布时间】:2011-08-30 16:13:16 【问题描述】:我的程序没有编译错误,但输出不正确。示例输入:
数组大小:5 输入数字:5 4 3 2 1 //排序:1 2 3 4 5 搜索:1 输出:在索引 4 处找到的数字 1
输出应该是在索引 0 处找到的数字 1,因为这些数字已经排序。我将如何将其更改为这个。
int[] nums = new int[100];
int SizeNum;
bool isNum = false;
private void ExeButton_Click(object sender, EventArgs e)
int i, loc, key;
Boolean found = false;
string SizeString = SizeTextBox.Text;
isNum = Int32.TryParse(SizeString, out SizeNum);
string[] numsInString = EntNum.Text.Split(' '); //split values in textbox
for (int j = 0; j < numsInString.Length; j++)
nums[j] = int.Parse(numsInString[j]);
if (SizeNum == numsInString.Length)
Array.Sort(numsInString);
key = int.Parse(SearchTextBox.Text);
ResultText.AppendText("Sorted: ");
for (i = 0; i < SizeNum; i++)
ResultText.AppendText(" " + numsInString[i]);
ResultText.AppendText("\n\n");
for (loc = 0; loc < SizeNum; loc++)
if (nums[loc] == key)
found = true;
break;
if (found == true)
ResultText.AppendText("Number " + key + " Found At Index [" + loc + "]\n\n");
else
ResultText.AppendText("Number " + key + " Not Found!\n\n");
【问题讨论】:
这看起来不像线性搜索。 你的程序显然确实有一个错误,因为它没有按照你的意愿去做...... 它看起来很像线性搜索。最后一部分。但是,Sort() 不是必需的,如果您想要输入数据中的位置,这是错误的。 【参考方案1】:您正在排序 numsInString
,但随后搜索 nums
。 nums
在搜索之前被填充,因此您会看到搜索未排序数字的结果。
将numsInStrings
解析为nums
后,您应该只使用后一个数组。确保这是您正在排序和搜索的那个。
换句话说,一旦将当前排序调用替换为
Array.Sort(nums);
你的代码会很好。
更新:
你实际上需要另一个修复。现在,您将 nums
初始化为大小为 100 的数组。默认情况下,每个元素都是 0。因此,即使您将数字放在前五个元素中,当您对数组进行排序时,您最终会得到 95 0,后跟 1 2 3 4 5。
您应该延迟初始化nums
,直到您看到numsInString
有多大:
string[] numsInString = EntNum.Text.Split(' '); //split values in textbox
nums = new int[numsInString.Length];
for (int j = 0; j < numsInString.Length; j++)
nums[j] = int.Parse(numsInString[j]);
现在,当您对nums
进行排序时,您只会看到您输入的数字。
【讨论】:
那你正在排序字符串数组而不是 int 数组,我认为这不是你打算做的。 @crlanglous 对;将排序更改为nums
数组可以解决这两个问题。
那是我的第一选择。数组.排序(数字);。但它显示零。然后我把它改成 NumInstring。
现在可以正确显示了。这就是为什么我看到很多零。我在我的代码上遗漏了一些东西。谢谢dlev。【参考方案2】:
您正在对numsInString
数组进行排序,但仍在搜索nums
数组。
for (loc = 0; loc < SizeNum; loc++)
if (numsInString[loc] == key)
found = true;
break;
【讨论】:
【参考方案3】:您正在解析numsInString
然后您正在对其进行排序。 (我怀疑这种排序也不会做你想做的事。)
我认为你真的想对nums
进行排序:
Array.Sort(nums);
话虽如此,有更简单的方法可以实现最终结果 - 例如使用IndexOf
查找数组中某个值的索引。
也不清楚你为什么在这里戴牙套:
for (i = 0; i < SizeNum; i++)
ResultText.AppendText(" " + numsInString[i]);
ResultText.AppendText("\n\n");
...
这使得它看起来就像你有一个带有身体的循环,但它实际上相当于:
for (i = 0; i < SizeNum; i++)
ResultText.AppendText(" " + numsInString[i]);
ResultText.AppendText("\n\n");
...
...大括号在这里没有任何作用,只会损害可读性。
【讨论】:
以上是关于线性搜索问题的主要内容,如果未能解决你的问题,请参考以下文章