二分查找算法描述如下:intsearch_bin(sst st, kt key){ low=1 ; high=st. length;
时间: 2023-05-17 17:00:40 浏览: 151
二分查找算法也被称为折半查找算法,是一种常见的查找算法。其主要思想是在有序数组中查找某个元素时,先确定该元素在数组中可能出现的区间范围,然后每次取该范围的中间值与目标元素进行比较,不断缩小目标元素可能出现的范围。当目标元素与中间值相等时,查找成功,否则根据中间值与目标元素的大小关系调整区间范围,再进行下一次查找。
具体地,二分查找算法的描述如下:
输入:已经有序的数组sst,待查找的元素kt
输出:目标元素的下标或者-1(表示未找到)
1. 初始化low=1,high为数组长度
2. 当low<=high时,重复以下步骤:
- a. 取中间值mid=(low+high)/2
- b. 若中间值等于目标元素kt,则返回mid
- c. 若中间值大于目标元素kt,则缩小右边的区间范围,将high=mid-1
- d. 若中间值小于目标元素kt,则缩小左边的区间范围,将low=mid+1
3. 若未找到目标元素,则返回-1
二分查找算法的时间复杂度为O(logn),相比于线性查找算法具有更高的效率。同时,该算法只适用于有序数组,对于无序数组需要先进行排序操作。
相关问题
下列算法的功能为:采用折半方法进行关键字的查找,请将算法中缺失的语句按照顺序填入对应的空格。 结构定义: typedef int KeyType; typedef struct{ KeyType key; }ElemType; typedef struct { ElemType *elem; int length; } SSTable; 折半查找算法: int Search_Bin(SSTable &ST,KeyType key){ //在有序表ST中折半查找其关键字等于key的数据元素 //若找到,则函数值为该元素在表中的位置,否则为0 int low=1, high=ST.length,mid; while(low<=high){ ; // (1) if(EQ(key, )) // (2) return mid; else if(LT(key,ST.elem[mid].key)) ; // (3) else ; // (4) } return 0; }
折半查找算法:
int Search_Bin(SSTable &ST,KeyType key){
//在有序表ST中折半查找其关键字等于key的数据元素
//若找到,则函数值为该元素在表中的位置,否则为0
int low=1, high=ST.length,mid;
while(low<=high){
mid = (low+high)/2; // (1) 折半计算中间位置
if(EQ(key, ST.elem[mid].key)) // (2) 关键字与中间位置元素相等
return mid;
else if(LT(key,ST.elem[mid].key)) // (3) 关键字小于中间位置元素
high = mid-1;
else // (4) 关键字大于中间位置元素
low = mid+1;
}
return 0;
}
用中文画出下列代码的程序框图int Search_Bin(SSTable ST, KeyType key) //二分查找函数 // 采用二分查找方法在有序表的n个记录中查找出关键字值为key的记录 //若查找成功,则返回其下标位置;否则,返回0 { int low=1; //查找范围的下界 int high=ST.length; //查找范围的上界 while(low<=high) { int mid=(low+high)/2;//中间位置,当前比较的记录位置 if(key==ST.elem[mid].key) return mid; //查找成功,返回下标位置 else if(key<ST.elem[mid].key) high=mid-1; //查找范围缩小到前半段 else low=mid+1; //查找范围缩小到后半段 } return 0; }//Search_Bin
抱歉,我无法进行程序框图的绘制。但我可以为您描述该程序的框图:
该程序的框图包括一个主函数框、一个Search_Bin函数框和若干处理框。主函数框调用Search_Bin函数,并传入SSTable类型的ST和KeyType类型的key。Search_Bin函数接收这两个参数,并根据二分查找的算法在ST中查找关键字值为key的记录。如果查找成功,返回该记录的下标位置;否则,返回0。Search_Bin函数包含三个处理框:初始化处理框(用于初始化查找范围的下界和上界)、比较处理框(用于比较查找范围中间位置的记录的关键字值与目标值key的大小,以决定下一步查找范围的上下界)、更新处理框(用于更新查找范围的上下界)。处理框的执行结果可能会影响下一轮的循环处理。最终,Search_Bin函数返回查找结果,供主函数进行处理。