登录|注册|帮助中心|联系我们

导航
首页 综合百科 生活常识 数码科技 明星名人 传统文化 互联网 健康 影视 美食 教育 旅游 汽车 职场 时尚 运动 游戏 家电 地理 房产 金融 节日 服饰 乐器 歌曲 动物 植物
当前位置:首页 > 教育

二分法c语言程序代码(c语言调用函数格式 )

发布时间:2022年12月26日责任编辑:张小花标签:函数代码格式

问题分析:

采用二分查找法查找特定关键字的元素。要求用户输入数组长度,也就是有序表的数据长度,并输入数组元素和查找的关键字。程序输出查找成功与否,以及成功时关键字在数组中的位置。例如,在有序表 10、13、17、 28、39、58、69、88、98、152 中查找关键字为88的元素。

算法描述:

(1)首先,从数组的中间元素开始查找,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。
(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域去查找,然后重复步骤(1)的操作。
(3)如果某一步数组为空,则表示找不到目标元素

代码实现:

???#include <stdio.h> ???void bubblingSort(int arr[], int n) { ???int i, j, temp; ???// 每次将一个元素送到末尾,n个元素,执行n次 ???for (i = 0; i < n; ++i) { ???????// 之前的循环已经将i个元素送到末尾,不需要再次比较,故减去,因为跟后一个元素比较,为了避免溢出,故减一 ???????for (j = 0; j < n - i - 1; ++j) { ???????????// 如果当前的元素比后一个元素小,就交换 ???????????if (arr[j] > arr[j + 1]) { ???????????????temp = arr[j]; ???????????????arr[j] = arr[j + 1]; ???????????????arr[j + 1] = temp; ???????????} ???????} ???}} ???int binarySearch(int key,int a[],int n) //自定义函数binary_search() ???{ ???????int low,high,mid,count=0,count1=0; ???????low=0; ???????high=n-1; ???????while(low<=high) ???//査找范围不为0时执行循环体语句 ???????{ ???????????count++; ???//count记录査找次数 ???????????mid=(low+high)/2; ???//求中间位置 ???????????if(key<a[mid]) ???//key小于中间值时 ???????????????high=mid-1; ???//确定左子表范围 ???????????else if(key>a[mid]) ???//key 大于中间值时 ???????????????low=mid+1; ???//确定右子表范围 ???????????else if(key==a[mid]) ???//当key等于中间值时,证明查找成功 ???????????{ ???????????????printf("查找成功!n 查找 %d 次!a[%d]=%d",count,mid,key); ???//输出査找次数及所査找元素在数组中的位置 ???????????????count1++; ???//count1记录查找成功次数 ???????????????break; ???????????} ???????} ???????if(count1==0) ???//判断是否查找失敗 ???????????printf("查找失敗!"); ???//査找失敗 ???????return 0; ???} ???int main() ???{ ???????int i,key,arr[100],n; ???????printf("请输入数组的长度:n"); ???????scanf("%d",&n); ???//输入数组元素个数 ???????????????printf("请输入数组元素:n"); ???????for(i=0;i<n;i++) ???????????scanf("%d",&arr[i]); ???//输入有序数列到数组a中 ???????????????????printf("排序前:"); ????????for (i = 0; i < n; ++i) { ???????printf("%d ", arr[i]); ???} ????????????bubblingSort(arr,n);//冒泡排序 ???????printf("排序后:");for (i = 0; i < n; ++i) { ???????printf("%d ", arr[i]); ???} ????????????printf("请输入你想查找的元素:n"); ???????scanf("%d",&key); ???//输入要查找的关键字 ???????binarySearch(key,arr,n); ???//调用二分法查找函数 ????????printf("n"); ???????return 0; ???}

运行结果:

???我从事互联网行业几十年,主要的研究方向是大数据,人工智能,物联网领域,感兴趣的朋友可以关注我,也可以在评论区留言,大家一起交流和沟通。

其它知识推荐

溜溜百科知识网——分享日常生活学习工作各类知识。 垃圾信息处理邮箱 tousu589@163.com
icp备案号 闽ICP备14012035号-2 互联网安全管理备案 不良信息举报平台 Copyright 2023 www.6za.net All Rights Reserved