文章插图
文章插图
问题分析:
采用二分查找法查找特定关键字的元素 。要求用户输入数组长度,也就是有序表的数据长度,并输入数组元素和查找的关键字 。程序输出查找成功与否,以及成功时关键字在数组中的位置 。例如,在有序表 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;}
运行结果:【C语言二分法代码 二分法的c语言程序】我从事互联网行业几十年,主要的研究方向是大数据,人工智能,物联网领域,感兴趣的朋友可以关注我,也可以在评论区留言,大家一起交流和沟通 。
- 熊二伤心图片 熊二惨死图片
- 熊大变成僵尸 熊二变成僵尸了
- java定义二维数组并赋值代码 Java给二维数组赋值
- 伊能静生第二胎是多大年龄 和第二任丈夫秦昊的爱女
- 笔记本一拖二显示器同屏 显示器 一拖二
- 免费二级域名注册申请 二级域名永久免费注册
- 二维码的定义与识别原理 二维码识别原理介绍
- 二极管的选用原则是什么 二极管选用应该注意的参数
- 2002高考数学平均分 2002高考数学
- 柘城二高怀孕一百多人事件