查找有序数组中的元素,如果无序,先用排序算法排好序
非递归
#include<stdio.h>
#include<stdlib.h>
#define N 10
void main()
{
int a[N];
for (int i = 0; i < N; i++)
{
a[i] = i * 2;
printf("%d ", a[i]);
}
printf("\n------------------------\n");
int shang = 0;
int xia = N - 1;
int num = 2;
while (shang <= xia)
{
int zhong = (shang + xia) / 2;
if (a[shang] == num || a[xia] == num || a[zhong] == num)
{
printf("\n找到了\n");
getchar();
return;
}
else if (a[zhong] < num)
{
shang = zhong + 1;
}
else
{
xia = zhong - 1;
}
}
printf("没找到\n");
getchar();
system("pause");
}
递归
int binary_search(int a[],int shang,int xia,int num)
{
int middle = (shang + xia) / 2;
int flag = 0;
if (shang <= xia)
{
if (a[middle] == num || a[shang] == num || a[xia] == num)
{
flag = 1;
return flag;
}
else if (a[middle] > num)
{
binary_search(a, shang, middle - 1, num);
}
else
{
binary_search(a, middle + 1, xia, num);
}
}
return flag;
}
void main()
{
int a[N];
int num = 5;
for (int i = 0; i < N; i++)
{
a[i] = i * 2;
printf("%d ", a[i]);
}
printf("\n请输入你要查找的数字:\n");
scanf_s("%d", &num);
int flag = binary_search(a, 0, N - 1,num);
if (flag == 0)
{
printf("没找到\n");
}
else
{
printf("找到了\n");
}
system("pause");
}