C#二进制搜索
本文关键字:搜索 二进制 | 更新日期: 2023-09-27 17:58:20
public int BinarySearch(int x)
{
//if (Attendees.Length == 0)
// return -1;
int mid = (Count/ 2) -1;
Student cur = new Student(x);
while (cur.CompareTo(Attendees[mid]) != 0)
{
int sCount = Count;
if (cur.CompareTo(Attendees[mid]) < 0)
{
int NCount = sCount / 2;
mid = NCount / 2 - 1;
}
if (cur.CompareTo(Attendees[mid]) > 0)
{
int Start = mid +1;
mid = (Start + sCount) / 2;
}
else
break;
cur = Attendees[mid];
}
if (cur.CompareTo(Attendees[x]) == 0)
return mid;
else
return -1;
}
有人能帮我找出为什么我的二进制搜索不起作用吗?我对编程很陌生,所以如果有任何帮助,我将不胜感激。非常感谢。
我认为您并没有真正理解二进制搜索的含义。在您的代码中,您正在搜索元素x
在数组中的哪个位置——猜猜看?它在x
位置!
二进制搜索的目的是找出一个元素的索引。Soooo您需要搜索给定的Student
:
public int BinarySearch(Student student)
{
// Search the entire range
int min = 0;
int max = Attendees.Length;
int mid = 0;
do
{
// Find the pivot element
mid = min + ((max - min) / 2);
// Compare
int comparison = student.CompareTo(Attendees[mid]);
if (comparison < 0)
{
max = mid;
}
if (comparison > 0)
{
min = mid;
}
}
while (min < max && comparison != 0);
if (comparison != 0)
return -1;
return mid;
}
这个代码可能不能100%工作,因为我还没有尝试过,也没有把它写下来,但它会给你指明正确的方向。现在,对这段代码使用调试器,并通过一步操作来查看它是否按预期工作。