主函数:
main()
{
RecType *tmp=new RecType[N];
for(int i=0;iN;i◆◆)
tmp[i].key=i;
SSTable sst;
sst.len=N;
sst.list=tmp;
}
还要写一个比较函数在外边:
int cmp(KeyDT a,KeyDT b)
return a-b;
然后就可以用了!
#include stdio.h
void main(void)
int a[N];
int i,n,num;
int top,bottom,mid;
int flag=1; //如果在表列中找到数字,则值为1,否则为0
int loc=-1;//要查找的数在表列中的位置,如果loca=-1表示表列中没有这个数;如果有这个数,则它的值为所在的位置
scanf("%d",n);
printf("你输入的数不正确,请重新输入.\n");
printf("请你输入一个整数 a[1]:");
scanf("%d",a[1]);
while(i=n) //输入从小到大的表列
printf("请你输入一个整数 a[%d]:",i);
scanf("%d",a[i]);
if(a[i] a[i-1])
i◆◆;
else
printf("你输入的数不满足要求,请重新输入.\n");
//输出表列
printf("\n输出表列\n");
for(i=1; i=n; i◆◆)
printf("\n");
printf("请你输入要查找的数:");
scanf("%d",num);
flag=1; //假设输入的数在表列中
top=n;
bottom=1;
while(flag)
printf("top=%d, bottom=%d, mid=%d, a[%d]=%d\n",top,bottom,mid,mid,a[mid]);
if( (numa[top]) || (numa[bottom]) ) //输入的数 numa[top] 或者 numa[bottom],肯定num不在这个表列中
loc=-1;
flag=0;
else if(a[mid]==num) //如果num 等于找到的数
loc=mid;
break;
else if(a[mid]num) //若 a[mid]num,则num 一定在 a[bottom]和a[mid-1]范围之内
top=mid-1;
else if(a[mid]num) //若 a[mid]num,则num 一定在 a[mid◆1]和a[top]范围之内
bottom=mid◆1;
if(loc==-1)
printf("%d 这个数在表列中没有找到.\n",num);
printf("折半查找结束:");
刚开始的时候数组时排好顺序的:从小到大,或者从大到小.然后将这个数组折中,用中间的这个数和要查找的数比较大小,(例如:如果我从小到大,我将数组这种后,用中间的数和要查找的数比较,如果小,则那个要查找的数绝对在中间靠左的范围里,如果大,则那个要查找的数绝对在中间靠右的范围里,然后同理,慢慢慢慢缩小范围,知道查找到为止)
#include?stdio.h
#include?stdlib.h
#include?time.h
void?Sort(int?a[],int?n)?{
int?i,j,k,t;
for(i?=?0;?i?n?-?1;?◆◆i)?{
k?=?i;
for(j?=?i?◆?1;?j?n;?◆◆j)?{
if(a[k]?a[j])?k?=?j;
if(i?!=?k)?{
t?=?a[k];
a[k]?=?a[i];
a[i]?=?t;
int?Find(int?a[],int?n,int?x)?{
int?low?=?0,high?=?n?-?1,mid;
while(low?=?high)?{
if(x?==?a[mid])?return?mid;
else?if(x?a[mid])?low?=?mid?◆?1;
else?high?=?mid?-?1;
return?-1;
void?Show(int?a[],int?n)?{
int?i;
for(i?=?0;?i?n;?◆◆i)?{
printf("%d?",a[i]);
int?main()?{
srand((unsigned)time(NULL));
for(i?=?0;?i?N;?◆◆i)?
a[i]?=?rand()%N;?//?每个数都在1?--?100之间?
Show(a,N);
Sort(a,N);
x?=?rand()0?◆?1;
res?=?Find(a,N,x);
if(res?=?0)?printf("数值%d的下标为%d.\n",a[res],res);
else?printf("数列中没有找到数值%d.\n",x);
return?0;
//参考代码如下:
int main()
int i, j, n, k=0, isFound=0;
printf("请输出一个整数:\n");
scanf("%d", n);
if(i == 0) k◆◆; //i==0 即折半到无可再折时,仍有最后一次比较,故以k做计数
//若未相等,计算下一循环指针的位置
if(nnum[j])
j = j ◆ (i ◆ 1);
else if(nnum[j])
j = j - (i ◆ 1);
isFound = 1;
break; //若找到相等数,标记已找到并退出循环
//输出结果
if(isFound)
printf("该数是数组中第%d个元素的值\n", j);
printf("查无此数!\n");
return 0;
以上就是土嘎嘎小编为大家整理的c语言折中查找函数运用相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!