目录
一、前言
想必我们高校大学生和一些小白在日常学习以及工作当中都会遇到二分查找,特别是在学习数据结构和C语言的时候仔细听,但下课还是不懂;不仔细听更是一塌糊涂;下面这些文字及代码就是关于二分查找简单的算法,过程就只需要输入一些相关信息,方可出现运算结果,详情如下:
二、二分查找是什么?
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。
【内容来源:百度百科-二分查找 二分查找_百度百科 (baidu.com)】
三、代码段
代码如下:
#include<stdio.h>
#include<stdlib.h>
int Binary_search_recursive(int *s,int length,int key,int L,int H);//二分查找的递归实现函数
void sort(int *s,int length);//对数组进行排序函数
void main()
{
int m;
int i;
int key;
int n[100];//待排序数组
printf("请输入数据的个数:\n");
scanf("%d",&m);
printf("请依次输入数据:\n");
for(i=0;i<m;i++)
{
scanf("%d",&n[i]);
}
sort(n,m);
printf("数据递增排序的效果为:\n");
for(i=0;i<m;i++)
printf("%d\t",n[i]);
printf("\n");
printf("请输入要查找的数据:\n");
while(scanf("%d",&key)!=EOF)
{
int pos1=Binary_search_recursive(n,m,key,0,m-1);
if(pos1==-1)
{
printf("没有找到要查询的数据!\n");
}
else
{
printf("数据 %d->位置 %d",key,pos1);
}
}
}
void sort(int *s,int length)//对数组进行排序函数
{
//改进版的冒泡排序算法 递增排序
int i=length-1;//比较的次数
int j;
int t;
int flag;
while(flag)
{
flag=0;
for(j=0;j<i;j++)
{
if(s[j]>s[j+1])
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;//交换数据
flag=1;
}
i--;
}
}
}
int Binary_search_recursive(int *s,int length,int key,int L,int H)//二分查找的递归实现函数
{
int M=(L+H)/2;
if(L>H)
return -1;
if(key<s[M])
{
return (Binary_search_recursive(s,length,key,L,M-1));
}
else if(key>s[M])
{
return (Binary_search_recursive(s,length,key,M+1,H));
}
else
return (M);
}
四、程序运行结果
1.运行示例
2.首先输入数据的个数
3. 依次输入5个整数
4. 输入完可以数据递增,如查找数据:
五、总结
二分查找就是以冒泡排序的方式来实现数据的递增,然后进行查找数值等功能。
以上为二分查找的代码、操作步骤,其中代码是我在上学时跟老师所敲的,这是数据结构教材的典型案例;
另外这个程序还有很多欠缺,由于能力有限没能实现,请见谅!若有侵犯,请联系删除!
文中若有不妥之处请谅解!有不明白的请在评论区问哦
本程序是我在上学期间跟老师所写,若有不妥,请谅解!