2017-08-27 90 views
2

这是一个好的执行二进制搜索算法?它的工作原理,但是我想到了一个实现,与我的教师不同。任何人都可以为我打洞吗?Java:二进制搜索

package algorithm.linearsearch; 

公共类二分查找{

public static void main(String[] args) { 
    System.out.println(binarySearch(
      new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 26, 109, 1001, 1100 }, 
      26)); 

} 

private static int binarySearch(int[] array, int target) { 
    int p = 0; 
    int r = array.length - 1; 
    int q; 

    while (p <= r) { 
     q = (p + r)/2; 
     if (array[q] == target) { 
      System.out.println("value: " + array[q]); 
      return q; 
     } 
     if (array[q] > target) { 
      r = q + 1; 
     } else { 
      p = q - 1; 
     } 

    } 

    return -1; 

} 

}

+0

你的教师执行什么? – Ravi

+1

您也可以尝试使用递归算法进行binarySearch。 – nagendra547

+1

这听起来像你要求* [代码审查](https://codereview.stackexchange.com/)*。 – ray

回答

1

就在这个

if (array[q] > target) { 
    r = q + 1; 
} else { 
    p = q - 1; 
} 

应该

if (array[q] > target) { 
    r = q - 1; // index lower to current pivot 
} else { 
    p = q + 1; // index upper to current pivot 
} 
+0

@nullpointer你错过了空指针的机会。在所有人中,你不应该把它当作你的用户名:D –

1

我可以说的一件事。如果找到您的程序,则返回索引,否则返回-1。因此,您不需要输出值作为从用户那里获取有关查找哪个元素的输入。

如果您的数组为空,您最初需要检查返回-1以避免在计算数组长度时发生空指针异常。