快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

二分查找函数封装c语言 c++二分查找函数

用C语言创建一个二分查找函数

排序(冒泡)

创新互联公司是一家以成都网站建设、网页设计、品牌设计、软件运维、网站推广、小程序App开发等移动开发为一体互联网公司。已累计为LED显示屏等众行业中小客户提供优质的互联网建站和软件开发服务。

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);

}

}

int find(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)=0 ij)--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语言二分查找法

#include stdio.h

int binfind(int val[] , int num , int value)

{

int start = 0;

int end = num - 1;

int mid = (start + end)/2;

while(val[mid] != value start end)

{

if (val[mid] value)

{

end = mid - 1;

}

else if (val[mid] value)

{

start = mid + 1;

}

mid = ( start + end )/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 (result 0)

{

printf("查无此数");

}

}

怎样写二分查找算法的程序(用C语言实现)

我用一个子函数实现的,主函数你自己写,对你又好处,需要传入一个数组和数组长度n以及要查找的数,如果查找成功,返回x在数组中的位置,否则返回-1

int search(int *a,int x)

{ int low=0,high=n-1,mid,flag=-1;

while(low=high)

{ mid=(low+high)/2;

if(a[mid]==x) return mid;

else if(a[mid]low) low=mid+1;

else high=mid-1;

}

return flag;

}

用C语言写二分查找的代码!!!

推荐答案的 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 = (low + high) / 2;

if (key == a[mid])

return mid; // 找到待查元素

else if (key  a[mid])

high = mid - 1; // 继续在前半区间进行查找

else

low = mid + 1; // 继续在后半区间进行查找

}

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++二分查找函数
标题URL:http://6mz.cn/article/hgpcoe.html

其他资讯