c语言中文二分搜索函数 c++二分搜索

用C语言写二分查找的代码?。。?/h2>推荐答案的 code 有问题,并没有考虑到若待查数的下标是 0 怎么办?所以若顺序表中不存在待查元素 应该 return -1
加上主函数的最后两行调用两次查找函数很多余,代码显得不够简练 。
建议改成:
#include stdio.h
#include stdlib.h
int Search(int *a, int key)
{
// 在顺序表中折半查找 key的数据元素 。若找到,则函数值为
int low = 0, mid; // 该元素的数组下标;否则为0 。
int high = 14;
while (low = high)
{
mid = (lowhigh) / 2;
if (key == a[mid])
return mid; // 找到待查元素
else if (keya[mid])
high = mid - 1; // 继续在前半区间进行查找
else
low = mid1; // 继续在后半区间进行查找
}
return -1; // 顺序表中不存在待查元素
}
void main()
{
int *a, key, i;
int b[15] = {0};
a = b;
printf("请自小到大输入15个整数:\n");
for (i = 1; i = 15; i)
{
【c语言中文二分搜索函数 c 二分搜索】scanf("%d", b[i - 1]);
printf("\n");
}
printf("请输入你要查找的数:\n");
scanf("%d", key);
i = Search(a, key);
if (-1 == i)
printf("你要查找的数不在目标数组中!\n");
else
printf("你要查找的数的数组下标为 %d \n", i);
}
C语言二分查找法#include stdio.h
int binfind(int val[] , int num , int value)
{
int start = 0;
int end = num - 1;
int mid = (startend)/2;
while(val[mid] != valuestartend)
{
if (val[mid]value)
{
end = mid - 1;
}
else if (val[mid]value)
{
start = mid1;
}
mid = ( startend )/2;
}
if (val[mid] == value)
return mid;
else
return -1;
}
int main()
{
int nums[] = {1 , 3 , 4 ,7 ,8 , 12 ,45 ,67 ,97 ,123 ,456 ,675 ,1111 , 4534 , 4563};
int result = binfind(nums , sizeof(nums) / sizeof(nums[0]) , 45);
if (result0)
{
printf("查无此数");
}
}
用C语言创建一个二分查找函数排序(冒泡)
void(student*tmp,int size)
{
for(int j=0;jn-1;j)
{
for(k=0;kn-1-j;k)
{
if(strcmp(tmp[k].name,tmp[k 1].name)0)
{
student tm=tmp[k];
tmp[k]=tmp[k 1];
tmp[k]=tm;
}
}
}
}
int findOn(student*test,char*name,int begin,int end)
{
if(beginend)
{
return -1;//没找到
}
int mid=end ((end-begin)/2);
if(strcmp(test[mid].name,name)==0)
{
return mid;
}elseif((strcmp(test[mid].name,name)0)
{
return findOn(test,name,mid 1,end);
}else
{
return findOn(test,name,begin,mid-1);
}
}
intfind(student *test,int size,char* studentname)
{
return findOn(test,strudentname,0,size-1);
}
find(student,3000,"testname");
再来一个快速排序
void quickSort(student *test arr,int startPos, int endPos)
{
int i,j;
student key;
key=arr[startPos];
i=startPos;
j=endPos;
while(ij)
{
while(strcmp(arr[j].name,key.name)=0ij)--j; //第一个比他小
{
student tmp=arr[i];
arr[i]=arr[j]; //moveed
arr[j]=tmp;
i;
}
while((strcmp(arr[i].name,key.name)=0 ij)i; //第一个比他大,
{
student tmp=arr[j];
arr[j]=arr[i];
arr[i]=tmp;
j--;
}
}
arr[i]=key; //赋值
if(i-1startPos) quickSort(arr,startPos,i-1);
if(endPosi 1) quickSort(arr,i 1,endPos);
}
quicksort(test,0,3000-1);
find(student,3000,"testname");
c语言编程二分查找好久不写c语言中文二分搜索函数了
写一个程序c语言中文二分搜索函数,建立N元整型数组,然后输入查找c语言中文二分搜索函数的整数x,查找x是否包含在数组中,查找用函数实现,若查找成功,返回x在数组中c语言中文二分搜索函数的第一次出现的下标,查找失败,返回-1
源程序c语言中文二分搜索函数:
#include"stdio.h"
#defineN10
int locate(int a[N],int x)
{int h,r,m;
h=0;r=N-1;m=(h r)/2;
while(h=rx!=a[m])
if(xa[m]) {r=m-1;m=(h r)/2;}
else{h=m 1;m=(h r)/2;}
if(hr)return -1;/*查找失败,返回-1*/
returnm;/*查找成功 , 返回有效下标m*/
}
void upinsert(int a[],int i)/*插入排序 (升序)*/
{int x,j;
x=a[i];j=i-1;
while(j=0a[j]x){a[j 1]=a[j];j--;}
a[j 1]=x;
}
void main()
{int a[N],x,k,n;
printf("input %d integers:\n",N);
for(k=0;kN;k){scanf("%d",a k);upinsert(a,k);}
printf("input x=") ;scanf("%d",x);
n=locate(a,x);
for(k=0;kN;k)printf("M",a[k]);
printf("\n fist position=%d\n",n);
}
没有错误,我试过了
关于c语言中文二分搜索函数和c二分搜索的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读