数据结构-折半查找 C语言源码

版权声明:未经原作者允许不得转载本文内容,否则将视为侵权 https://blog.csdn.net/springhammer/article/details/88617742

数据结构-折半查找 C语言源码

算法思想:先确定待查记录所在的范围,然后逐步缩小范围直到找到或找不到该记录为止。

#include<stdio.h>
#include<stdlib.h>
struct ZBCZ{
	int*elem;
	int length;
};
void ko(ZBCZ& l,int n)
{
	
		int hj;
		l.elem=(int*)malloc(sizeof(int)*n);
		for(int k=0;k<n;k++)
		{
		scanf("%d",&hj);
		l.elem[k]=hj;	
		}
		l.length =n;
}
void xianshi(ZBCZ l)
{
	for(int i=0;i<l.length ;i++)
	{
		printf(" %d ",l.elem[i]);
	}
}
int find(ZBCZ l,int k)
{
	
	int high;
	int low;
	int mid; 
	low=0;
	high=l.length;
	high--;
	if(l.elem[low]==k)
	{
		return -2;
	}
	if(l.elem[high]==k)
	{
		return -3;
	}
	mid=(high+low)/2;
	int count=0;
	while(l.elem[mid]!=k)
	{
		if(count==l.length )
		{
			return -1;
		}
			if(l.elem[mid]<k)
		{
			low=mid;
			mid=(high+low)/2;
			count++;
		}
			if(l.elem[mid]>k)
		{
			high=mid;
			mid=(high+low)/2;	
			count++;
		}
	
	}
	
	printf("目标元素序号%d\n",mid);
	return count;
}
main()
{
	int n;
	printf("请输入表长");
	scanf("%d",&n);
	ZBCZ l;
	printf("\n开始输入表中元素");
	ko(l,n);
	int k;
	printf("请输入待查找元素");
	scanf("%d",&k);
	int f=find(l,k);
	if(f!=-1&&f!=-2&&f!=-3)
	printf("查找次数为%d",f);
	if(f==-2)
	{
		printf("该元素位于表头"); 
	}
	if(f==-3)
	{
		printf("该元素位于表尾"); 
	 } 
	 if(f==-1)
	 {
	 	printf("无待查找元素"); 
	 } 
	 printf("\n");
	 xianshi(l);
	 printf("\n%d",l.length); 
	return 0;
	}

在这里插入图片描述
快看,这才是重点!我想能看到这里的同学,无外乎两种人:来拷贝代码的人 和 来拷贝代码的人。

但,在拷贝走的时候,你要想清楚一件事,把代码拷走之后有个蛋用,搞明白对你来说才是最重要的。

好了,就酱紫。

老铁,这要是都不赞,说不过去吧!!!哦,对了,你这么好看,关注一下呗。。。

最后对自己说:
你现在所遭遇的每一个不幸,都来自一个不肯努力的曾经。

猜你喜欢

转载自blog.csdn.net/springhammer/article/details/88617742