Java实现二分法查找

转载请标明出处:http://blog.csdn.net/android_for_james/article/details/51492493


BinarySearch

二分法查找,顾名思义就是要将数据每次都分成两份然后再去找到你想要的数据,我们可以这样去想,二分法查找很类似与我们平时玩的猜价格游戏,当你报出一个价格时裁判会告诉你价格相对于真实值的高低,倘若是低了那我们一定会再说出一个略高的价格,反之亦然。在二分法查找时要求传入的数据必须已经有序,假设现在为升序,然后每次将所寻找的值与中间值(数组左边界+(右边界-左边界)/2)作比较,大了则去寻找中间值左侧数据,小则寻找中间值右侧数据。

代码实现:

  1. public class BinarySearch {
  2. //进行二分法查找的前提是数组已经有序!
  3. public static int rank(int key,int nums[])
  4. {
  5. //查找范围的上下界
  6. int low= 0;
  7. int high=nums.length- 1;
  8. //未查找到的返回值
  9. int notFind=- 1;
  10. while(low<=high)
  11. {
  12. //二分中点=数组左边界+(右边界-左边界)/2
  13. //整数类型默认取下整
  14. int mid=low+(high-low)/ 2;
  15. //中间值是如果大于key
  16. if(nums[mid]>key)
  17. {
  18. //证明key在[low,mid-1]这个区间
  19. //因为num[mid]已经判断过了所以下界要减一
  20. high=mid- 1;
  21. } else if(nums[mid]<key)
  22. {
  23. //证明key在[mid+1,high]这个区间
  24. //同样判断过mid对应的值要从mid+1往后判断
  25. low=mid+ 1;
  26. }
  27. else
  28. {
  29. //查找成功
  30. return mid;
  31. }
  32. }
  33. //未成功
  34. return notFind;
  35. }
  36. public static void main(String[] args) {
  37. System.out.println( "请输入数据数量:");
  38. Scanner scanner= new Scanner(System.in);
  39. int amount=scanner.nextInt();
  40. int num;
  41. int nums[]= new int[amount];
  42. int i= 0;
  43. while(i<amount)
  44. {
  45. nums[i]=scanner.nextInt();
  46. i++;
  47. }
  48. Arrays.sort(nums);
  49. System.out.println( "请输入想要查找的值");
  50. int key=scanner.nextInt();
  51. int answer=rank(key,nums);
  52. if(answer!=- 1)
  53. {
  54. System.out.println( "所查找的数据存在:"+nums[answer]);
  55. }
  56. else
  57. {
  58. System.out.println( "您所查找的数据不存在");
  59. }
  60. }
  61. }


猜你喜欢

转载自blog.csdn.net/u012111923/article/details/80893829