首页 文章

二进制搜索对象数组[重复]

提问于
浏览
0

这个问题在这里已有答案:

我得到了一些代码,其中包含一个Person对象数组,我将编写方法来进行二进制搜索,并覆盖Person类中的compareto方法,以便根据姓氏和名字进行比较 .

public static int binarySearch( Person[] persons, Person key )
   {
      int low = 0;
      int high = persons.length - 1;

      return binarySearch(persons, key, low, high);
   }

   private static int binarySearch( Person[]persons, Person key, int low, int high )
   {
          if(low > high)        //The list has been exhausted without a match.
              return -low - 1;

          int mid = (low + high) / 2;
          if (persons[mid] == key)
              return mid;
          if(persons[mid] < key) //!!**'The < operator is undefined for the type'
              return binarySearch(persons, key, low, mid-1);
          else 
              return binarySearch(persons, key, 0, persons.length -1);
       }

我想我的大部分二进制搜索代码都写了 . 但是,我遇到的问题是if(people [mid] <key)我得到错误'<运算符未定义类型' .

我认为它可能需要用我的compareTo方法做一些事情,但我似乎无法解决它

这里是compareTo供参考

public int compareTo( Object o )
   {
      Person p = (Person) o;
      int d = getLastName().compareTo(p.getLastName());
      if (d == 0)
          d = getFirstName().compareTo(p.getFirstName());
      return d;
   }

感谢您的帮助!

3 回答

  • 1

    代替

    if(persons[mid] < key)
    

    使用

    if(persons[mid].compareTo(key) < 0)
    
  • 1

    试试这个:

    int mid = (low + high) / 2;
    if (persons[mid].compareTo(key) == 0)
        return mid;
    if(persons[mid].compareTo(key) < 0)
        return binarySearch(persons, key, low, mid-1);
    else 
        return binarySearch(persons, key, 0, persons.length -1);
    

    您无法使用 < > like运算符比较对象 .

  • 0

    您正在比较两个对象引用,它们只保留指向实际人对象位置的位模式 . 对于对象比较,您需要定义要比较它们的属性(属性) . 试试吧

    if (persons[mid].compareTo(key) == 0)
            return mid;
        if(persons[mid].compareTo(key) < 0)
    

    还要检查binarySearch的正确实现 .

    return binarySearch(persons, key, mid +1, high);
    else
         return binarySearch(persons, key, low, mid -1);
    

    你还没有在compareTo中使用 this . 应该是这样的

    public int compareTo( Object o )
       {
          Person p = (Person) o;
          int d = this.getLastName().compareTo(p.getLastName());
          if (d == 0)
              d = this.getFirstName().compareTo(p.getFirstName());
          return d;
       }
    

    也是你的人 array sorted

相关问题