从键盘输入一整数(表示数组元素的个数)和一个一维数组,再输入要查找的数。利用折半法查找数组中是否存在该数,并输出查找结果(如果在请输出该数在数组中的位置,如不在请输出不存在)。
程序运行结果示例:
输入:请输入数组的个数:
5
33
66
55
44
88
请输入要查找的数:55
输出:存在排序后数组的第2位
输入提示:“请输入数组的个数:\n”
输入格式:("%d", &n)
输入提示:“请输入要查找的数:”
输入格式:("%d", &n)
输出格式:“存在排序后数组的第%d位\n”
输出格式:“不存在”
#include<stdio.h>
int flag = 0;
int fun(int low, int high, int n, int *num)
{
int mid;
mid = (low + high) / 2;
if (n == num[mid])
{
flag = 1;
return mid;
}
else if (n > num[mid])
fun(mid + 1, high, n, num);
else
fun(low, mid - 1, n, num);
}
void main()
{
int n, m, i, j, k;
int *a;
printf("请输入数组的个数:\n");
scanf("%d", &n);
a = (int *)malloc(sizeof(int) * n);
for ( k = 0; k < n; k++)
{
scanf("%d", &a[k]);
}
for ( i = 0; i < n - 1; i++)//从小到大排序
{
for ( j = i + 1; j < n; j++)
{
int temp;
if (a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
printf("请输入要查找的数:");
scanf("%d", &m);
fun(0, n - 1, m, a);
if (flag)
{
printf("存在排序后数组的第%d位\n", fun(0, n - 1, m, a));
}
else
{
printf("不存在");
}
system("pause");
}