代码实现
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int ElemType;
typedef struct{
ElemType *elem;
int TableLen;
}SSTable;
int Search_Seq(SSTable ST,ElemType key){
ST.elem[0] = key;
int i;
for(i = ST.TableLen;ST.elem[i]!=key;--i);
return i;
}
int Binary_Search(SSTable ST,ElemType key){
int low = 0,high = ST.TableLen;
int mid;
while(low<=high){
mid = (low+high)/2;
if(ST.elem[mid] == key)
return mid;
else if(ST.elem[mid] > key)
high = mid-1;
else
low = mid+1;
}
return -1;
}
int Binary_Search_Rec(SSTable ST,ElemType key,int low,int high){
if(low>high)
return -1;
int mid = (low+high)/2;
if(ST.elem[mid] == key)
return mid;
else if(ST.elem[mid] > key)
return Binary_Search_Rec(ST,key,low,mid-1);
else
return Binary_Search_Rec(ST,key,mid+1,high);
}
void InitTable(SSTable *ST){
ST->TableLen = 0;
}
bool AddElem(SSTable *ST,ElemType elem){
ST->elem[ST->TableLen+1] = elem;
ST->TableLen++;
}
int main(){
int index;
SSTable ST;
InitTable(&ST);
AddElem(&ST,1);
AddElem(&ST,4);
AddElem(&ST,3);
AddElem(&ST,2);
AddElem(&ST,9);
AddElem(&ST,8);
AddElem(&ST,10);
AddElem(&ST,7);
AddElem(&ST,6);
AddElem(&ST,5);
AddElem(&ST,13);
AddElem(&ST,421);
AddElem(&ST,999);
printf("顺序查找:\n");
index = Search_Seq(ST,13);
if(index == 0)
printf("未找到数据元素13\n");
else
printf("数据元素13的位置为%d\n",index);
index = Search_Seq(ST,19);
if(index == 0)
printf("未找到数据元素19\n");
else
printf("数据元素19的位置为%d\n",index);
printf("\n");
printf("折半查找(非递归):\n");
index = Binary_Search(ST,13);
if(index == -1)
printf("未找到数据元素13\n");
else
printf("数据元素13的位置为%d\n",index);
index = Binary_Search(ST,19);
if(index == -1)
printf("未找到数据元素19\n");
else
printf("数据元素19的位置为%d\n",index);
printf("\n");
printf("折半查找(递归):\n");
index = Binary_Search_Rec(ST,13,1,ST.TableLen);
if(index == -1)
printf("未找到数据元素13\n");
else
printf("数据元素13的位置为%d\n",index);
index = Binary_Search_Rec(ST,19,1,ST.TableLen);
if(index == -1)
printf("未找到数据元素19\n");
else
printf("数据元素19的位置为%d\n",index);
printf("\n");
}