c# - 计算为 BinarySearch 进行的比较次数

标签 c# algorithm search count

我的任务是创建两个单独的程序,一个线性搜索程序(我已经完成)和一个二进制搜索程序。这些程序还必须计算在搜索过程中进行的比较次数。我的线性搜索程序已经计算出比较次数,而我的二分搜索程序则不能。二进制搜索的代码如下所示:

using System;
using System.Collections.Generic;

public class Example
{
public static void Main()
{

    Console.WriteLine("Input number you would like to search for");

    String Look_for = Console.ReadLine();

    int Lookfor;

    int.TryParse(Look_for, out Lookfor);

    {
        List<int> numbers = new List<int>();

        numbers.Add(1); 
        numbers.Add(2); 
        numbers.Add(3); 
        numbers.Add(4); 
        numbers.Add(5); 
        numbers.Add(6); 
        numbers.Add(7); 
        numbers.Add(8); 

        Console.WriteLine();
        foreach (int number in numbers)
        {
            Console.WriteLine(number);
        }

        int answer = numbers.BinarySearch(Lookfor);

        Console.WriteLine("The numbers was found at:");

        Console.WriteLine(answer);

    }
 }
}

如果有人能告诉我如何修改它来计算比较,将不胜感激。

非常感谢,马修。

最佳答案

实现 IComparer<int> 计算比较:

private class CountComparer : IComparer<int> {

  public int Count { get; private set; }

  public CountComparer() {
    Count = 0;
  }

  public int Compare(int x, int y) {
    Count++;
    return x.CompareTo(y);
  }

}

然后将其用作the overload of BinarySearch that takes a comparer中的比较器:

CountComparer comparer = new CountComparer();
int answer = numbers.BinarySearch(Lookfor, comparer);

然后比较器包含计数:

Console.WriteLine("The binary search made {0} comparisons.", comparer.Count);

奖励:任何可比较类型的通用计数比较器:

private class CountComparer<T> : IComparer<T> where T : IComparable<T> {

  public int Count { get; private set; }

  public CountComparer() {
    Count = 0;
  }

  public int Compare(T x, T y) {
    Count++;
    return x.CompareTo(y);
  }

}

关于c# - 计算为 BinarySearch 进行的比较次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12742151/

相关文章:

c# - 如何使用 Watson Unity SDK 制作语音到文本的自定义模型?

c# - 在 BindingSource 中组合多个列表

javascript - 如何使用 JavaScript 查找日期数组中的日期交叉点/冲突

search - FTSearch 和 NotesDocumentCollection

sharepoint - IFilter dll 适用于 Windows 桌面搜索,但不适用于 SharePoint 2007

c# - 在 WPF/C# 中显示时区。发现夏令时偏移

c# - 是否可以始终调用而不是检查 InvokeRequired?

javascript - 找出 4 个百分比之间的所有可能性

c++ - Karp Rabin 中的质数和 block 长度

search - 无法执行sphinx搜索命令未找到