折半查找的查找过程是:先确定待查记录所在的范围(区间),然后逐渐缩小范围直到找到或找不到记录为止。
以处于区间中间为止记录的关键字和给定值比较,若相等,则查找成功;若不相等,则缩小范围,直至新的区间中间位置记录的关键字等于给定值或者查找区间的大小小于0(表明查找不成功)为止。
折半查找只适用于有序表,且限于顺序存储结构。
折半查找性能:log2(n+1)-1
C# 代码
1. 普通方法
private static int Binary1(int[] arr, int x) { int low = 0; int high = arr.Length - 1; int pointer; while (low <= high) { pointer = (low + high) / 2; if (arr[pointer] == x) { return pointer; } else if (x > arr[pointer]) { low = pointer + 1; } else { high = pointer - 1; } } return -1; //当x不在数组arr中时,返回-1 }
2. 递归方法
private static int Binary2(int[] arr, int x, int low, int high) { //当x不在数组arr中时,返回-1 if (low > high) { return -1; } int pointer = (low + high) / 2; if (arr[pointer] == x) { return pointer; } if (arr[pointer] > x) { high = pointer - 1; return Binary2(arr, x, low, high); } else { low = pointer + 1; return Binary2(arr, x, low, high); } }