折半查找

首先将给定值key与表中中间位置元素的关键字比较,若相等,则查找成功,返回该元素的存储位置,若不等,则所需查找的元素只可能在中间元素以外的前半部分或后半部分中,然后在缩小的范围内继续进行同样的查找。

  1. int Binary_Search(SeqList L, ElemType key)
  2. {
  3. //在有序表L中查找关键字为key的元素,若存在则返回其位置,不存在则返回-1
  4. int low=0, high=L.TableLen-1, mid;
  5. while(low<=high)
  6. {
  7. mid=(low+high)/2;//取中间位置
  8. if(L.elem[mid]==key)
  9. return mid;//查找成功则返回其所在位置
  10. else if(L.elem[mid]>key)
  11. high=mid-1;//从前半部分继续查找
  12. else
  13. low=mid+1;//从后半部分继续查找
  14. }
  15. return -1;
  16. }
时间复杂度:O(log2n)




posted @ 2015-08-22 20:06  Lucas_1993  阅读(133)  评论(0编辑  收藏  举报