折半查找
又称为二分查找。这种查找方法要求查找表的数据是线性结构保存,并且还要求查找表中的数据是按关键字由小到大有序排列。
折半查找(二分查找)是一种简单而又高效的查找算法,其查找长度至多为㏒2n+1(判定树的深度),平均查找长度为㏒2(n+1)-1,效率比顺序查找要高,但折半查找只能适用于顺序存储有序表(如对线性链表就无法有效地进行折半查找)。
经典非递归算法实现
int Binary_Search(int search_table[], int key, int low ,int high) { while(low <= high) { mid = (low + high) / 2; if(search_table[mid] < key) { low = mid + 1; } else if(search_table[mid] > key) { high = mid - 1; } else { return mid; } }//while return -1; }
经典递归算法实现
int Binary_Search(int search_table[], int key, int low ,int high) { if(low > high) { return -1; } int mid = (low + high) / 2; if(search_table[mid] == key) { return mid; } else if(search_table[mid] < key) { Binary_Search(search_table, key, mid + 1, high); } else { Binary_Search(search_table, key, low, mid - 1); } }
不过,由于折半查找的前提条件是需要有序表顺序存储,对于静态查找表,一次排序后不再变化,这样的算法已经比较好了。但是对于频繁执行插入或删除操作的数据集来说,维护有序的排序会带来不小的工作量,那就不建议使用了。
时间: 2024-10-09 08:01:51