线性搜索问题
本文关键字:问题 线性搜索 | 更新日期: 2023-09-27 18:07:08
我的程序没有编译错误,但输出不正确。输入例子:
size: 5
输入数字:5 4 3 2 1
//排序:1 2 3 4 5
搜索:1
输出:编号1在索引4
输出应该是在索引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");
}
}
}
您正在排序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
排序时,您将只看到您输入的数字。
您正在排序numsInString
数组,但仍在搜索nums
数组。
for (loc = 0; loc < SizeNum; loc++)
{
if (numsInString[loc] == key)
{
found = true;
break;
}
}
您正在解析numsInString
然后您正在排序它。(我怀疑排序也不会做你想要的。)
我认为你真的想把nums
排序:
Array.Sort(nums);
话虽如此,有更简单的方法来实现最终结果-例如使用IndexOf
来查找数组中值的索引。
这里为什么要用大括号也很不清楚:
for (i = 0; i < SizeNum; i++)
ResultText.AppendText(" " + numsInString[i]);
ResultText.AppendText("'n'n");
{
...
}
这使得看起来就像你有一个带有body的循环,但它实际上相当于:
for (i = 0; i < SizeNum; i++)
{
ResultText.AppendText(" " + numsInString[i]);
}
ResultText.AppendText("'n'n");
{
...
}
…大括号在这里没有任何作用,只会损害可读性。