欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在一个有序数组中,查找具体的某个数(二分查找)

程序员文章站 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;
}