有几种不同的方法可以是用:
1.穷举法
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string>
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9};//创建一个有序数组
int i = 0;
int k = 6;//在数组中找到6
int sz = sizeof(arr) / sizeof(arr[0]);//计算出数组的大小
for (i = 0; i < sz; i++)//创建循环,将数组中的每一个数与k比较
{
if (k == arr[i])//当找到数组中的k时
{
printf("找到了,下标是%d\n", i);//打印出k的下标
break;//结束循环
}
}
if (i == sz)//如果比较完数组中的所有数都没有k
{
printf("找不到");//打印“找不到”
}
return 0;
}
2.二分查找算法
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string>
int main()
{
int k = 5;
int arr[] = { 1,2,3,4,5,6,7,8,9 };
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;//左下标
int right = sz - 1;//右下标
while (left<=right)//循环将k与区域中间的值比较
{
int mid = (left + right) / 2;//中间值的下标
if (k > arr[mid])//如果K大于中间的值,代表k在右半区域
{
left = mid + 1;//将右半区域再次划分
}
else if (k <arr[mid])如果K小于中间的值,代表k在左半区域
{
right = mid - 1;将左半区域再次划分
}
else//否则当k等于中间值时
{
printf("找到了,下标是%d\n", mid);//打印出k的下标
break;//结束循环
}
}
if (left > right)//当数组书友的数与k相比较均不相等
{
printf("找不到\n");//打印出“找不到”
}
return 0;
}
3.自己写的笨办法可以说是前两种方法的结合
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9 };
int k = 5;
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组的大小
int i = (sz - 1) / 2;//中间值
if (k < arr[i])//划分去域,当k小于中间值时
{
for (; i >= 0; i--)//创建循环将k与右半区域的值一一比较
{
if (k == arr[i])//找到k时
{
printf("找到了,下标是%d\n", i);//输出下标
break;//结束循环
}
}
}
else if (k > arr[i])//当k大于中间值时
{
for (; i < sz; i++)//创建循环将k与左半区域的值一一比较
{
if (k == arr[i])//找到k时
{
printf("找到了,下标是%d\n", i);//输出下标
break;//结束循环
}
}
}
else//否则k等于中间值
printf("找到了,下标是%d\n",i);//输出下标
if (i < 0 || i >= sz)//如果k与数组里所有的数比较都不想等
{
printf("找不到了\n");//输出“找不到”
}
return 0;