语言实现线性表二分查找
1,输入输出结果样例展示:
注:第一行输入线性表数字个数
第二行输入线性表
第三行输出待查找数字
输出结果为线性表中该数字位置下标(未找到返回0)
2,代码展示(供参考)
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
typedef int Position;
typedef struct LNode List;
struct LNode {
ElementType Data[100];
Position Last;
};
//结构体定义线性表
/******************************
*******************************
* 函数名:int divide(int num) *
* 接口:num 返回值:num *
* 函数功能:二分位置 *
*******************************
******************************/
int divide(int num)
{
if(num % 2 == 0)
{
return num / 2;
}
else if(num % 2 == 1 && num != 1)
{
return (num - 1) / 2;
}
}
/***********************************
************************************
* 函数名:List *ReadInput(int num) *
* 接口:num 返回值:L *
* 函数功能:将数字输入线性表 *
************************************
***********************************/
List *ReadInput(int num)
{
List *L;
int i;
for(i=1;i <= num;i++)
{
scanf("%d", &L->Data[i]);
}
return L;
}
/****************************************************
*****************************************************
* 函数名:int BinarySearch(List *L, *
* int X, int num, int markh, int markl) *
* 接口:List *L, int X, int num,int markh, int markl *
* 返回值:markh + num *
* 函数功能:找出数字在表中位置并返回(未找到返回0) *
*****************************************************
****************************************************/
int BinarySearch(List *L, int X, int num, int markh, int markl)
{
int T = 0;
while(markl != markh)
{
if(L->Data[markl] < X)
{
return 0;
}
num = divide(num);
if(L->Data[markh + num] == X)
{
T = 1;
break;
}
else if(L->Data[markh + num] > X)
{
markl = markl - num;
}
else
{
markh = markh + num;
}
}
if(T != 1)
return 0;
else
return markh + num;
}
/*******************************
********************************
* 函数名:int main() *
* 接口:void 返回值:0 *
* 函数功能:二分查找 *
********************************
*******************************/
int main()
{
List *L;
ElementType X;
Position P;
int num, markl, markh = 0;
scanf("%d", &num);
L = ReadInput(num);
markl = num;
scanf("%d", &X);
P = BinarySearch(L, X, num, markh, markl);
if(P == 0)
printf("0\n");
else
printf("%d\n", P);
return 0;
}
/* Edit by TonyT
No reprinting withou author's permission!!*/