采用二分查找
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Search(int arr[],int len,int flag)
{
int right = len - 1;
int left = 0;
while (left <= right)
{
int mid = (right + left) / 2;
if (arr[mid]>flag)
{
right = mid - 1;
}
else if (arr[mid]<flag)
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[] = { 1,6,9,10,12,14,67,89 };
int index = Search(arr, 8, 12);
printf("%d\n", index);
return 0;
}
对于二维数组,对数组的要求是上下左右依次递增,我们可以从最左下角元素开始查找,大于该数,向右移,小于该数,向左移;
#include<stdio.h>
int Search(int arr[][4])
{
int i = 3;
int j = 0;
int num = 20;
while (i >= 0 && j < 4)
{
if (num > arr[i][j])
{
j++;
}
else if (num < arr[i][j])
{
i--;
}
else
{
return arr[i][j];
}
}
return -1;
}
int main()
{
int arr[4][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16} };
int ret = Search(arr);
printf("%d", ret);
return 0;
}