在一个有序数组中,查找具体的某个数(二分查找)
程序员文章站
2024-03-17 15:13:04
...
问题:
给定已排序好的n个元素arr[0:n-1],现在要在这n 个元素中找出一特定元素x
基本思想:
将n个元素分成个数大致相同的两半,取arr[n/2]与x进行比较。如果x=arr[n/2],则找到x,算法终止。如果x<arr[n/2],则只要在数组arr的左半部继续搜索x。如果x>arr[n/2],则只需要在数组arr的右半部继续寻找x。
最坏情况下的时间复杂度: O(log n)
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Search(int x,int arr[],int n)
{
int left = 0;
int right = n-1;
while (left <= right)
{
int mid = (left + right) / 2;
if (x == arr[mid])
return mid;
if (x > arr[mid])
left = mid + 1;
else
right = mid - 1;
}
return -1;//未找到x
}
int main()
{
int num = 0;
int arr[] = {0,1,2,3,4,5,6,7,8,9,10};
printf("请输入你想查找的数字: ");
scanf("%d", &num);
int temp = Search(num,arr,11);//11为数组长度
if (temp==-1)
printf("已给数组中找不到x\n");
else
printf("已找到x 下标是:%d\n", temp);
return 0;
}
上一篇: [经典面试题]二分查找问题汇总