当前位置:   article > 正文

c++二分查找实现(非递归和递归方式)_c++实现二分查找的非递归与递归,随机数

c++实现二分查找的非递归与递归,随机数

大学学数据结构时侯学的算法,现在复习一下:

  1. #include <iostream>
  2. using namespace std;
  3. /*
  4. *二分查找思想:1、数组从小到大排序;2、查找的key每次和中间数比较,如果key小于mid
  5. 查找mid左侧的数组部分;如果key大于mid,则查找mid右侧的数组部分;如果相等,则直接返回mid。
  6. 输入:排序数组-array,数组大小-aSize,查找值-key
  7. 返回:返回数组中的相应位置,否则返回-1
  8. */
  9. //非递归查找
  10. int BinarySearch(int *array, int aSize, int key)
  11. {
  12.     if ( array == NULL || aSize == 0 )
  13.         return -1;
  14.     int low = 0;
  15.     int high = aSize - 1;
  16.     int mid = 0;
  17.    while ( low <= high )
  18.     {
  19. mid = (low + high )/2;
  20. if ( array[mid] < key)
  21. low = mid + 1;
  22. else if ( array[mid] > key )
  23. high = mid - 1;
  24. else
  25. return mid;
  26. }
  27. return -1;
  28. }
  29. //递归
  30. int BinarySearchRecursive(int *array, int low, int high, int key)
  31. {
  32. if ( low > high )
  33. return -1;
  34. int mid = ( low + high )/2;
  35. if ( array[mid] == key )
  36. return mid;
  37. else if ( array[mid] < key )
  38. return BinarySearchRecursive(array, mid+1, high, key);
  39. else
  40. return BinarySearchRecursive(array, low, mid-1, key);
  41. }
  42. int main()
  43. {
  44. int array[10];
  45. for (int i=0; i<10; i++)
  46. array[i] = i;
  47. cout<<"No recursive:"<<endl;
  48. cout<<"position:"<<BinarySearch(array, 10, 6)<<endl;
  49. cout<<"recursive:"<<endl;
  50. cout<<"position:"<<BinarySearchRecursive(array, 0, 9, 6)<<endl;
  51. return 0;
  52. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/348871
推荐阅读
相关标签
  

闽ICP备14008679号