二分查找
二分查找是一种在有序数组中查找某一特定元素的搜索算法。它的思想是:搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>
int Find(int arr[],int size,int key)
{
int left = 0;
int right = size - 1;
int mid = 0;
while (left <= right)
{
mid = (left + right) / 2;
if (key < arr[mid])
{
right = mid - 1;
}
else if (key>arr[mid])
{
left = mid + 1;
}
else
{
return mid;
break;
}
}
return -1;
}
int main()
{
int i;
int arr[10] = { 0 };
printf("请输入10个有序数据;");
for (i = 0; i < 10; i++)
{
scanf("%d", &arr[i]);
}
int size = sizeof(arr) / sizeof(arr[0]);
/*int left = 0;
int right = sizeof(arr) / sizeof(arr[0])-1;*/
int key;
printf("请输入要找的数字;");
scanf("%d", &key);
int ret = Find(arr, size, key);
if (ret == -1)
{
printf("没有找到\n");
}
else
{
printf("找到了,下标为:%d\n", ret);
}
//printf("%d\n", right);
system("pause");
return 0;
}