简单介绍下折半查找,折半查找仅适用于有序的顺序表。
查找成功的平均查找长度为log2(n+1)-1
折半查找判定树的树高为log2(n+1)向上取整
下面投放折半查找代码
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 50
#define keyType int
//顺序表结构体
typedef struct{
int data[MaxSize];
int length;
}SeqList;
//创建顺序表
void createTable(SeqList &L){
int i=0;
L.length=0; //用循环方法初始化时,千万要记得给length赋初值
for(;i<5;i++){
L.data[i] = i;
L.length++;
}
}
//输出顺序表
void printTable(SeqList L){
int i;
for(i = 0;i<L.length;i++){
printf("%d\t",L.data[i]);
}
printf("\n");
}
int binarySearch (SeqList L,int value) {
int low = 0,mid;
int high = L.length-1;
while(low <= high){
mid = (low+high)/2;
if(L.data[mid]==value)
return mid;
else if(L.data[mid] > value)
high = mid - 1;
else
low = mid + 1;
}
return -1;
}
int main(int argc, const char * argv[]) {
SeqList L;
createTable(L);
printTable(L);
int binary = binarySearch(L,3);
printf("折半查找,查找到3的位置为:%d\n",binary);
return 0;
}