有序数组查找

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

一个一个找是最简单的办法了,但是如果是无序数组我们也可以这么干,更何况是有序的!

因此我们可以使用二分查找法或者折半查找法

#include<stdio.h>
int main()
{
	int k;
	int a[]={1,2,3,4,5,6,7,8,9,10};
	int right,left;
	int sz=sizeof(a)/sizeof(a[0]);
	right=0;
	left=sz-1;
	int mid;
	
	scanf("%d",&k);
	while(right<=left)
	{
	mid=(right+left)/2;
	if(a[mid]<k)
	{
		right=mid+1;
	}
	else if(a[mid]>k)
	{
		left=mid-1;
	}
	else
	{
		printf("找到了\n");
		break;
	}
	}
	if(right>left)
	{
		printf("找不到\n");
	}

	return 0;
}

这个代码中while的条件是值得好好想想的

上一篇:2021.11.25 关于c语言的数组


下一篇:常见排序算法(C语言)