/*
二分查找
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;
}
}
二分查找(源码)
最新推荐文章于 2024-07-11 10:08:51 发布