版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37345402/article/details/87558659
int BinarySearch(STable ST,int k){
int left,right,mid;
left=1;
right=ST.length;
while(left<=right){
mid=(left+right)/2;
if(k<ST.elem[mid]){
right=mid-1;
}else if(k>ST.elem[mid]){
left=mid+1;
}else{
return mid;
}
}
return -1;
}
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
typedef struct LNode{
int *elem;
int length;
}STable;
void create(STable &ST,int n){
ST.elem=(int*)malloc((n+1)*sizeof(int));
ST.length=0;
int x;
for(int i=1;i<=n;i++){
scanf("%d",&x);
ST.elem[i]=x;
ST.length++;
}
}
int BinarySearch(STable ST,int k){
int left,right,mid;
left=1;
right=ST.length;
while(left<=right){
mid=(left+right)/2;
if(k<ST.elem[mid]){
right=mid-1;
}else if(k>ST.elem[mid]){
left=mid+1;
}else{
return mid;
}
}
return -1;
}
void Print(STable ST){
for(int i=1;i<=ST.length;i++){
printf("%d ",ST.elem[i]);
}
printf("\n");
}
int main(){
STable ST;
create(ST,6);
Print(ST);
printf("4所在的位序为:%d\n",BinarySearch(ST,4));
printf("9所在的位序为:%d\n",BinarySearch(ST,9));
return 0;
}
二分查找判定树
ASL:平均查找长度
一棵序列号为n的有序二叉树,二分查找就是将给定值k与二分查找判定树的根节点的关键字进行比较。若相等,则成功找到;若小于根节点则在根节点的左边查找;大于根节点,则在根节点的右边查找。