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

问题:
给定已排序好的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 sc = sizeof(arr)/sizeof(arr[0]);//求数组的长度(sizeof 计算字节的大小)
	int temp = Search(num,arr,sc);
	if (temp==-1)
		printf("已给数组中找不到x\n");
	else
		printf("已找到x  下标是:%d\n", temp);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_45658339/article/details/108193128