0
static Int64 binsearch(int first, Int64 target, int last, Dictionary<Int64> mynumbers)
{
        Int32 mid;
        int iteration = 0;

        while (first < last)
        {
            iteration = iteration + 1;
            mid = (first + last) / 2;

            if (mynumbers[mid].Equals(target))
            {
                return mynumbers[mid];
            }

            else if (target < mynumbers[mid])
            {
                last = mid - 1;
            }

            else if (target > mynumbers[mid])
            {
                first = mid + 1;
            }


        }
        return 0;
    }

我需要字典中的原始位置编号

例如 (2,5,10,3,1,5,6)

0=a[2], 1=a[5], 2=a[10],....

然后搜索 10 给我 2

4

1 回答 1

1

Dictionary没有排序,您无法可靠地判断插入值的顺序。

您可以尝试一些方法:

  1. 将位置添加到值中,例如Dictionary<long, Tuple<long, int>>. 这样,当您检索某个键的值时,您将获得一个包含实际值和位置的元组。此外,您可能希望使用自定义类而不是Tuple.
  2. 使用List<KeyValuePair<long, long>>. 中的值List是有序的,因此您将能够找到插入的顺序。搜索给定键的值会很慢(O(n)),但这对您来说可能不是问题。
于 2013-10-06T10:41:25.433 回答