C语言 - 有序数组查找数字
发布日期:2021-05-07 10:11:56 浏览次数:19 分类:原创文章

本文共 968 字,大约阅读时间需要 3 分钟。

1:

#include<stdio.h>int main(){   	int arr[] = {   1,2,3,4,5,6,7,8,9,10};	int k = 7;//要查找的数字	int i = 0;	int sz = sizeof(arr)/sizeof(arr[0]);//数组元素个数	for(i=0; i<sz; i++)//遍历数组	{   		if(arr[i] == k)			printf("要查找的数字的下标是%d\n", i);	}	return 0;}

2:

使用二分查找法(折半查找)优化代码
算法思想:
二分查找是针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0

时间复杂度log2^n   要计算2^32个数据只要32次
具体步骤
1.确定左右下标
2.确定中间元素的下标
3.如果中间元素<要查找的数,则排除中间元素的左部分,重新确定左下标;
如果中间元素>要查找的数,则排除中间元素的右部分,重新确定右下标;
4.整体需要不断的循环去排除数据,直到左下标<=右下标

#include<stdio.h>int main(){   	int arr[] = {    1,2,3,4,5,6,7,8,9,10 };	int k = 7;//要查找的数字	int sz = sizeof(arr)/sizeof(arr[0]);	int left = 0;//左下标 	int right = sz-1;//右下标 = 元素个数-1	while(left <= right)	{   		int mid = (left+right)/2;//确定中间下标		if(arr[mid] < k)		{   			left = mid + 1;//因为arr[mid]<k,所以排除arr[mid]		}		else if(arr[mid]>k)		{   			right = mid - 1;		}		else		{   			printf("找到了,下标是%d\n", mid);			break;		}	}	if(left > right)	{   		printf("找不到\n");	}	return 0;}
上一篇:C语言 - 字符从两端移动,向中间汇聚
下一篇:C语言 - 计算n的阶乘(n!)

发表评论

最新留言

不错!
[***.144.177.141]2025年03月15日 01时10分23秒