问题
- 给定一个整数X和整数A0,A1,A2.....AN-1,后者已经预先排序完成,求使得X=Ai的下标i,若X不在数据中则返回-1;
问题分析:
- 最简单的方法为从头到尾对整数组进行遍历操作,但是这种做实际上没有用到数组已经排序完成这一条件,因此效率较低。
- 对于这类查找可以采用二分查找的方式。
算法分析:
- 直接验证X与居中元素的大小关系,如果大于就继续验证X与右侧元素组的居中元素的大小关系,如果小于就验证X与左侧元素组的居中元素大小关系,以此类推直到找到下标或得到X不在数组中的结论。
代码:
int BinarySearch(ElementType A[],ElementType X,int N) { int Low,High,Mid; Low=0;High=N-1; while(High>=Low) { Mid = (High+Low)/2; if(A[Mid]<X) { Low = Mid+1; } else if(A[Mid]>X) { High = Mid-1; } else return Mid; } return NotFound; }
来源:https://www.cnblogs.com/cyh-blackhouse/p/12422613.html