写在前面:执行二分排序地前提条件是:数组中的数据是从大到小或者从小到大有序排列的,概括起来就是必须是有序排列的,我们来看实现函数的过程,在符合low<high的大前提下,如果index<arr[middle]则在左侧继续查找,并给high赋值为middle-1,若index>arr[middle]则在右侧继续查找并给low重新赋值为middle+1,否则就找出了对应的索引值,直接返回middle的值。
#include <stdio.h>
#include <stdlib.h>
int binary_sort(int *a,int left,int right,int target);
int main()
{
int a[] = {12,435,768,7567,8968,9678,75666,6573489};
int length = sizeof(a)/sizeof(a[0]);
int target=0;
printf("请输入要查找的值\n");
scanf("%d",&target);
int post = binary_sort(a,0,length-1,target);
if(post == -1)
{
printf("要查找的值不在数组中,查找失败\n");
}
else
{
printf("post is %d\n",post);
}
}
int binary_sort(int *a,int left,int right,int target)
{
while(left<right)
{
int mid = (left+right)/2;
if(a[mid]<target)
{
left = mid+1;
}
if(a[mid]>target)
{
right = mid-1;
}
if(a[mid]==target)
{
return mid;
}
}
return -1;
}
编译运行结果如下
当输入一个不在数组中的值时