我有一些代码对我来说没有多大意义。我有一个字符串数组,并且在foreach()循环中使用二进制搜索对它们进行计数。除了排序之外,两次尝试输出的代码都是完全相同的。我不知道为什么我会得到这样的结果。我假设它应该以相同的方式计算两次数组的值。有什么帮助吗?
代码:
using System;
public class Driver {
public static void Main(string [] args) {
String [] s = {"Bob", "Jane", "Will", "Bill", "Liz"};
Console.WriteLine("Before Sorting:\n----------");
foreach(string item in s) {
Console.WriteLine("{0}. {1}", Array.BinarySearch(s, item) + 1, item);
}
Console.WriteLine("Will is at position {0}", Array.BinarySearch(s, "Will") + 1);
Console.WriteLine("\n\nAfter Sorting:\n----------");
Array.Sort(s);
foreach(string item in s) {
Console.WriteLine("{0}. {1}", Array.BinarySearch(s, item) + 1, item);
}
Console.WriteLine("Will is at position {0}", Array.BinarySearch(s, "Will") + 1);
}
}输出:
Before Sorting:
----------
1. Bob
2. Jane
3. Will
0. Bill
-2. Liz
Will is at position 3
After Sorting:
----------
1. Bill
2. Bob
3. Jane
4. Liz
5. Will
Will is at position 5我确信这是件很愚蠢的事,但我想不通。
发布于 2012-10-04 01:53:32
二进制搜索仅适用于排序的数组。它找不到值:
如果未找到value并且value小于数组中的一个或多个元素,则为
。该负数是大于value的第一个元素的索引的按位补码。如果未找到value,并且value大于数组中的任何元素,则返回一个负数,它是(最后一个元素的索引加1)的逐位补码。
发布于 2012-10-04 01:54:21
Array.BinarySearch要求对数组进行排序。从文档中:
此方法不支持搜索包含负索引的数组。在调用此方法之前,必须对数组进行排序。
根据设计,它将返回负值:
如果未找到value,并且value小于数组中的一个或多个元素,则为负数,它是大于value的第一个元素的索引的逐位补码。
发布于 2012-10-04 01:54:36
二进制搜索在排序数组上工作。您的数组没有排序,因此您会得到预期的随机结果。
https://stackoverflow.com/questions/12714070
复制相似问题