您的位置:首页 > 其它

二分查找(源码)

2017-05-08 21:03 369 查看
/*
二分查找
Q:判断X是否在一个大小为n的有序数组S中 .
I:正整数n; 键X; 有序(非递减顺序)键数组S, 索引范围为1到n.
O:location, x在S中的位置(若X不在S中,则为0).
*/
#include<stdio.h>
#include<stdlib.h>

void CreatArray(int *Array, int Size);
int BinarySearch(int *Array, int n, int x, int n1);

int main()
{
//变量声明
int n, i;
int *a;

//创建数组
printf("input n: ");
scanf("%d", &n);                            //数组大小
a = (int *)malloc(sizeof(int) * n);
CreatArray(a, n);

//查找键X;
int x;
int location;
printf("input x: ");
scanf("%d", &x);
location = BinarySearch(a, n, x, n);
printf("location: %d", location);
//	for(i=0; i<n; i++)
//	{
//		printf("%d\t", a[i]);
//	}
}

/*
创建一维动态数组
*/
void CreatArray(int *Array, int Size)
{
int i;
for(i=0; i<Size; i++)
{
printf("a[%d]:" , i);
scanf("%d", &Array[i]);
}
}

/*
二分查找
*/
int BinarySearch(int *Array, int n, int x,int n1)
{
if(Array[n/2] > x)
{
return BinarySearch(Array, n/2, x, n1);
}
else if(Array[n/2] <x)
{
return BinarySearch(Array, n/2 + n1, x, n1);
}
else
{
return n/2;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: