Java BinarySearch

前端之家收集整理的这篇文章主要介绍了Java BinarySearch前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我能得到一些帮助吗?我已经尝试了很多方法来使这个工作我得到数组排序和打印但之后我的二进制搜索功能不想运行并给我正确的结果.它总是给我-1.有帮助吗?
  1. public class BinarySearch {
  2. public static final int NOT_FOUND = -1;
  3. public static int binarySearch(double[] a,double key) {
  4. int low = 0;
  5. int high = a.length -1;
  6. int mid;
  7. while (low<=high) {
  8. mid = (low+high) /2;
  9. if (mid > key)
  10. high = mid -1;
  11. else if (mid < key)
  12. low = mid +1;
  13. else
  14. return mid;
  15. }
  16. return NOT_FOUND;
  17. }
  18. public static void main(String[] args) {
  19. double key = 10.5,index;
  20. double a[] ={10,5,4,10.5,30.5};
  21. int i;
  22. int l = a.length;
  23. int j;
  24. System.out.println("The array currently looks like");
  25. for (i=0; i<a.length; i++)
  26. System.out.println(a[i]);
  27. System.out.println("The array after sorting looks like");
  28. for (j=1; j < l; j++) {
  29. for (i=0; i < l-j; i++) {
  30. if (a[i] > a[i+1]) {
  31. double temp = a[i];
  32. a[i] = a[i+1];
  33. a[i+1] = temp;
  34. }
  35. }
  36. }
  37. for (i=0;i < l;i++) {
  38. System.out.println(a[i]);
  39. }
  40. System.out.println("Found " + key + " at " + binarySearch(double a[],key));
  41. }
  42. }

解决方法

你实际上并没有与数组值进行比较.在
  1. while (low <= high) {
  2. mid = (low + high) / 2;
  3. if (mid > key) {
  4. high = mid - 1;
  5. } else if (mid < key) {
  6. low = mid + 1;
  7. } else {
  8. return mid;
  9. }
  10. }

而是使用此部分

  1. while (low <= high) {
  2. mid = (low + high) / 2;
  3. if (a[mid] > key) {
  4. high = mid - 1;
  5. } else if (a[mid] < key) {
  6. low = mid + 1;
  7. } else {
  8. return mid;
  9. }
  10. }

你找对索引是正确的,但你所做的是你只是将索引号与你的密钥进行比较,这显然是不正确的.当您编写[mid]时,您实际上会将您的密钥与索引中间的数字进行比较.

最后一行代码也是编译错误,应该是

  1. System.out.println("Found " + key + " at " + binarySearch(a,key));

猜你在找的Java相关文章