对于有序数组,查找里面是否有想要的数字。本次设置为升序数组。
/*
写代码可以在整型有序数组中查找想要的数字,
找到了返回下标,找不到返回 - 1.(折半查找)
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int searchnum( int num,int left,int right, int arr[]);
int main()
{
int arr[] = {0,2,3,5,6,7,9,11,16,20};
int arrlength = sizeof(arr) / sizeof(arr[0]);
int num = 0;
int left = 0;
int right = arrlength - 1;
printf("请输入要查找的数字:\n");
scanf("%d", &num );
searchnum(num,left,right,arr);
system("pause");
return 0;
}
int searchnum(int num, int left, int right, int arr[])
{
int mid = 0;
while (left<=right)
{
int mid = (left + right) / 2;
if (arr[mid] > num)
{
right = mid - 1;
}
else if (arr[mid] < num)
{
left = mid + 1;
}
else
{
printf("找到了,下标是%d\n", mid);
return mid;
}
}
printf("找不到\n");
return -1;
}