题目:线性表(a1,a2,a3,…,an)中元素递增有序且按顺序存储在计算机中。要求设计一个算法完成用最少时间在表中查找值为x的元素,若找到将其与后继元素位置相交换,若找不到将其插入表中并使表中元素仍递增有序。
算法思想:有序顺序表,可以用二分查找(折半查找)。
int BinarySearch(ElemType A[], ElemType x){
int low = 0, high = n-1, mid; //low记录最左边元素位置,high记录最右边元置,mid记录中间位置
while(low<=high){
mid = (low+high)/2; //mid记录最中间位置(不为整数时,记录前面的那个位置)
if(L.data[mid] < x)
low = mid+1; // 中间元素小于x,x在后半部分,low设置为mid下一个位置
else if (L.data[mid] > x)
high = mid-1; //x在前半部分,high设置为mid前一个元素的位置
else
return mid; // mid位置的值等于x,返回这个位置(下标,一个数字)
}
return -1; //查不到x,返回-1表示错误