数据结构-折半查找 C语言源码
数据结构-折半查找 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;
}
快看,这才是重点!我想能看到这里的同学,无外乎两种人:来拷贝代码的人 和 来拷贝代码的人。
但,在拷贝走的时候,你要想清楚一件事,把代码拷走之后有个蛋用,搞明白对你来说才是最重要的。
好了,就酱紫。
老铁,这要是都不赞,说不过去吧!!!哦,对了,你这么好看,关注一下呗。。。
最后对自己说:
你现在所遭遇的每一个不幸,都来自一个不肯努力的曾经。