C# 线性搜索问题
我的程序没有编译错误,但输出不正确。输入示例: 数组大小:5C# 线性搜索问题,c#,algorithm,linear-search,C#,Algorithm,Linear Search,我的程序没有编译错误,但输出不正确。输入示例: 数组大小:5 输入数字:5 4 3 2 1 //排序:12345 搜索:1 输出:在索引4处找到编号1 输出应该是索引0处的数字1,因为这些数字已经排序。我怎么把它改成这个 int[] nums = new int[100]; int SizeNum; bool isNum = false; private void ExeButton_Click(object sender, EventArgs e) {
输入数字:5 4 3 2 1
//排序:12345
搜索: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");
}
}
}
int[]nums=newint[100];
int SizeNum;
bool-isNum=false;
私有void ExeButton_单击(对象发送者,事件参数e)
{
int i,loc,键;
布尔值=false;
string SizeString=SizeTextBox.Text;
isNum=Int32.TryParse(SizeString,out SizeNum);
字符串[]numInstalling=EntNum.Text.Split(“”);//在文本框中拆分值
对于(int j=0;j
您正在排序numinstall
,但随后搜索nums
nums
将在搜索之前填充,因此您将看到搜索未排序数字的结果
将numinstalling
解析为nums
后,您应该只使用后一个数组。确保那是你正在排序和搜索的
换句话说,一旦将当前排序调用替换为
Array.Sort(nums);
你的代码会很好的
已更新:
你真的需要另一个修复。现在,您正在将nums
初始化为大小为100的数组。默认情况下,每个元素将为0。因此,即使在前五个元素中输入数字,当对数组进行排序时,最终的结果是95个0,然后是1 2 3 4 5
您应该延迟初始化nums
,直到您看到numinstall
有多大:
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]);
}
string[]numinstring=EntNum.Text.Split(“”)//在文本框中拆分值
nums=newint[numinstring.Length];
对于(int j=0;j
现在,当您对
nums
进行排序时,您将只看到您输入的数字。您正在对nums进行排序,然后搜索nums
nums
将在搜索之前填充,因此您将看到搜索未排序数字的结果
将numinstalling
解析为nums
后,您应该只使用后一个数组。确保那是你正在排序和搜索的
换句话说,一旦将当前排序调用替换为
Array.Sort(nums);
你的代码会很好的
已更新:
你真的需要另一个修复。现在,您正在将nums
初始化为大小为100的数组。默认情况下,每个元素将为0。因此,即使在前五个元素中输入数字,当对数组进行排序时,最终的结果是95个0,然后是1 2 3 4 5
您应该延迟初始化nums
,直到您看到numinstall
有多大:
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]);
}
string[]numinstring=EntNum.Text.Split(“”)//在文本框中拆分值
nums=newint[numinstring.Length];
对于(int j=0;j
现在,当您排序nums
时,您将只看到您输入的数字。您正在解析numinstall
,然后您正在排序它。(我怀疑这类人也不会做你想做的事。)
我想你真的想对nums进行排序:
Array.Sort(nums);
话虽如此,还是有更简单的方法来实现最终结果,比如使用IndexOf
来查找数组中某个值的索引
也不清楚为什么这里有牙套:
for (i = 0; i < SizeNum; i++)
ResultText.AppendText(" " + numsInString[i]);
ResultText.AppendText("\n\n");
{
...
}
(i=0;i
ResultText.AppendText(“+numInstalling[i]);
ResultText.AppendText(“\n\n”);
{
...
}
这使它看起来像是有一个带主体的环,但实际上相当于:
for (i = 0; i < SizeNum; i++)
{
ResultText.AppendText(" " + numsInString[i]);
}
ResultText.AppendText("\n\n");
{
...
}
(i=0;i
{
ResultText.AppendText(“+numInstalling[i]);
}
ResultText.AppendText(“\n\n”);
{
...
}
。。。大括号在这里没有任何作用,只会损害可读性。您正在解析
numinstang
然后对其进行排序。(我怀疑这类人也不会做你想做的事。)
我想你真的想对nums进行排序:
Array.Sort(nums);
话虽如此,还是有更简单的方法来实现最终结果,比如使用IndexOf
来查找数组中某个值的索引
也不清楚为什么这里有牙套:
for (i = 0; i < SizeNum; i++)
ResultText.AppendText(" " + numsInString[i]);
ResultText.AppendText("\n\n");
{
...
}
(i=0;i
ResultText.AppendText(“+numInstalling[i]);
ResultText.AppendText(“\n\n”);
{
...
}
这使它看起来像是有一个带主体的环,但实际上相当于:
for (i = 0; i < SizeNum; i++)
{
ResultText.AppendText(" " + numsInString[i]);
}
ResultText.AppendText("\n\n");
{
...
}
(i=0;i
{
ResultText.AppendText(“+numInstalling[i]);
}
ResultText.AppendText(“\n\n”);
{
...
}
。。。大括号在这里没有任何作用,只会损害可读性。您正在排序
numinstang
数组,但仍在搜索n