这篇文章用两种方法写出两个代码:在一个有序数组查出具体值

分别是

①一般方法书写

②折半查找法/二分查找法

一、一般方法代码书写

#include <stdio.h>
int main()
{char arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 0;
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
scanf("%d", &k);
for (i = 0; i < sz; i++)
{
	if (arr[i] == k)
	{
		printf("找到了,下表为;%d", i);
		break;
	}	
}
	if(arr[i]!=k)
	printf("没找到");
return 0;
}


运行结果;

C语言练习题:在一个有序数组中查找出具体的值_二分查找算法

C语言练习题:在一个有序数组中查找出具体的值_C语言练习题_02

 

二、折半查找法/二分查找法

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序储存结构,而且表中元素按关键字有序排列。

1、查找原理:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

2、代码书写:

 

#include <stdio.h>
int main()
{
	int arr[] = { 1,2.,3,4,5,6,7,8,9,10 };
	int k = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
	int left = 0;//左下标;
	int right = sz - 1;//右下标
	scanf("%d", &k);
	while (left <= right)///首先左下标left小于右下标right,在查找过程中left用
	//mid+1赋值,right用mid-1赋值,一旦出现left>right,说明没有找到所要找的值。
	{
		int mid = (left + right) / 2;
		if (arr[mid] > k)
		{
			right = mid - 1;//重新定右下标
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;//重新定左下标
		}
		else
		{
			printf("找到了,下标为:%d", mid);
			break;
		}
	}
	if(left>right)
	{
		printf("没找到\n");
	}
	return 0;
}



运行结果:

C语言练习题:在一个有序数组中查找出具体的值_折半查找算法_03