二分排序实现

写在前面:执行二分排序地前提条件是:数组中的数据是从大到小或者从小到大有序排列的,概括起来就是必须是有序排列的,我们来看实现函数的过程,在符合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;
}

编译运行结果如下 

当输入一个不在数组中的值时

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值