二分查找法的基本思想与实现代码

时间:2022-06-09 22:09:59

二分查找法思想:

二分查找法又称夹逼法,二分查找法使用的基本条件是一个有序的数组,通过从数组头部和尾部折半,判断要查找的数和mid位置数值的大小,来判断要查找的数实在那一半,之后继续折半查找,直至找到这个数或者最后小端大于大段则结束查找

二分查找法代码:

#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAXLEN 100

//创建数组
void createArr(int arr[],int len)
{
int i=0;
srand((unsigned int)time(NULL));
for(i=0;i<len;i++)
{
arr[i]=rand()%MAXLEN;
}
return ;
}

//打印数组
void printArr(int arr[], int len)
{
int i=0;
for(i=0;i<len;i++)
{
printf("%d=%d\n",i+1,arr[i]);
}
return ;
}

//选择排序代码
void select_sort(int arr[],int len)
{
int i=0,j=0;
for(i=0;i<len;i++)//控制每次从数组哪个位置开始执行循环,第一次从第一个元素开始,之后每次向后移动一个元素
{
for(j=i+1;j<len;j++)//负责未排序部分第一个元素与后面元素之间的比较,不满足排序规则时交换两个元素
{
if(arr[j]<arr[i])
{
int tem=arr[i];
arr[i]=arr[j];
arr[j]=tem;
}
}
}
return ;
}

void binary_chop(int arr[],int len,int num)
{
int min=0;
int max=len-1;
while(min<=max)
{
int mid=(max-min)/2+min;
if(arr[mid]<num)
min=mid+1;
else if(arr[mid]>num)
max=mid-1;
else
{
cout<<"找到"<<num<<endl;
return ;
}
}
cout<<"数组中没有"<<num<<endl;
return ;
}

int main(void)
{
int number;

printf("Hello World!\n");

int arr[MAXLEN]={0};

createArr(arr,MAXLEN);

select_sort(arr,MAXLEN);

printArr(arr,MAXLEN);

cout<<"请输入要查找的数:"<<endl;

cin>>number;

binary_chop(arr,MAXLEN,number);

return 0;
}