c语言函数二分查找 c语言二分查找程序代码

C语言二分查找#include stdio.h
#include string.h
int Binarysearch(int w[],int n,int x) {
int m,high = n - 1,low = 0;
while(low = high) {
m = (lowhigh)/2;
if(x == w[m]) return m;
else if(xw[m]) high = m - 1;
else low = m1;
}
return -1;
【c语言函数二分查找 c语言二分查找程序代码】}
int main() {
int i,j,n,t,index,scr;
char name[1000][23],tmp[23];
int score[1000];
printf("输入要统计的学生个数:");
scanf("%d",n);
for(i = 0;in;i) {
printf("姓名 成绩:");
scanf("%s%d",name[i],score[i]);
}
for(i = 0;in - 1;i) {
for(j = 0;jn - i - 1 ;j) {
if(score[j]score[j1]) {
t = score[j];
score[j] = score[j1];
score[j1] = t;
strcpy(tmp,name[j]);
strcpy(name[j],name[j1]);
strcpy(name[j1],tmp);
}
}
}
printf("学生姓名和C语言课程的成绩从高到低输出:\n");
for(i = 0;in;i)
printf("%s\t%d\n",name[i],score[i]);
printf("\n输入要查找的成绩:");
scanf("%d",scr);
index = Binarysearch(score,n,scr);
if(index = 0) printf("%s\t%d\n",name[index],score[index]);
return 0;
}
用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)
{
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语言实现) ??二分查找是一种简单高效的查找算法 。其思想在生活中广泛应用,比如从图书馆书架上查找书,查字典,测量领域中热电偶温度补偿等 。
??二分查找可以用 循环 和 递归 两种方式实现
二分查找 c语言 二分查找#includestdio.h
int main()
{
int i,j,k,n,m;
int a[105];
scanf("%d",n);
for(i=0;in;i)
scanf("%d",a[i]);
scanf("%d",m);
int left=0;right=n-1;
while(right=left)
{
mid=(left right)/2;
if(a[mid]==m)
{
printf("%d\n",mid);
break;
}
else if(a[mid]m)
right=mid-1;
else
left=mid 1;
}
if(leftright)
printf("null\n");
return 0;
}
用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; //第一个比c语言函数二分查找他小
{
student tmp=arr[i];
arr[i]=arr[j]; //moveed
arr[j]=tmp;
i;
}
while((strcmp(arr[i].name,key.name)=0 ij)i; //第一个比他大c语言函数二分查找,
{
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语言二分法查找#include stdio.h//不用math头文件
void main()
{int high = 9,low = 0,m,k,a[10]={1,2,3,4,5,6,7,8,9,10};//hing和low赋初值
scanf("%d",k);
while (high=low)//=
{
m=(high low)/2;
if(ka[m]) high=m-1;//比较的是数值而不是下标
else if(ka[m]) low=m 1;
else
{
printf("yes");
return;//这两句地方放错了
}
}
printf("no");
return;//if语句去掉
}
关于c语言函数二分查找和c语言二分查找程序代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读