方式1
采取逐个遍历比较
#include <stdio.h>
int main()
{
//数组是给定的有序数组(即按照从大到小或者从小到大排列,不一定等差)
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int n;
printf("请输入n:");
scanf("%d", &n);
//采取一个个遍历的做法
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]); //数组元素个数
for (i = 0; i < sz; i++)
{
if (arr[i] == n)
{
printf("下标是%d\n", i);
break; //找到了之后就跳出循环,找到之后的循环都是无意义的
}
}
if (i == sz)
printf("%d不在数组中!\n", n);
}
方法2
二分法
#include <stdio.h>
int main()
{
//数组是给定的有序数组(即按照从大到小或者从小到大排列,不一定等差)
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int n;
printf("请输入n:");
scanf("%d", &n);
//采用二分法
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]); //数组元素个数
int left = 0; //初始状态时左边元素下标
int right = sz - 1; //初始状态时右边元素下标
while (left<=right)
{
int mid = (left + right) / 2; //中间元素下标
//int mid = left + (right - left) / 2;
if (arr[mid] < n)
{
left = mid + 1;
}
else if (arr[mid] > n)
{
right = mid - 1;
}
else
{
printf("%d的下标是:%d\n", n, mid);
break; 找到了之后就跳出循环,找到之后的循环都是无意义的
}
}
if (left > right)
{
printf("%d不在数组中!\n", n);
}
}