˳

来自「用递归实现的二分法」· 代码 · 共 56 行

TXT
56
字号
#include<stdio.h>
#define nu 20
#include<malloc.h>
typedef struct
{
    int  r[nu]; 
    int length;   	// length为表中元素的个数
}RecordList;

RecordList  *SqLset( )
{
RecordList *L;
int  i=0,a;
L=(RecordList *)malloc(sizeof(RecordList));
printf("输入一个整型有序序列,输入0时结束!");
scanf("%d", &a);    //输入一个整数
L->length=0;
while(a!=0) { //整数0为输入结束标志,输入一个有序的整数序列
   L->r[i]=a ;
   L->length++;  i++;
   if(L->length==nu-1)   break;
  else scanf("%d", &a);
}
return L;
}

int  BinSrch(RecordList *L,int  k,  int  low,  int  high)
{
                 //在有序表L中二分查找其关键字等于k的元素,
    int  mid;
    if(low > high)  return  -1;
	else if(low<=high)
	{          mid=(low+high)/2;
                        if ( (L->r[mid]==k)||(L->r[mid-1]==k)||(L->r[mid+1]==k))   	//找到待查元素
                               return  mid;
                  else  if(k<L->r[mid])
     	                 return  BinSrch(L,k,mid-1,high);
        	      else  if(k>L->r[mid])      	         
                         return  BinSrch(L,k,low,mid-1);
}
}

 void main()
 {int m;
  RecordList  *A;
  int  k,  low,  high;  
   A=SqLset( );
   low = 0;   high = A->length-1;
   printf("请输入你想查找的元素:");
   scanf("%d", &k);   //输入待查元素
   m = BinSrch(A, k, low, high);
if(m==-1) 
printf("查找不成功!");
else  printf("m=%d, 查找成功!",  m);
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?