C语言 乱序数组 二分法(先排序)

比较鸡肋,不实用。使用二分法前提最好是有现成的有序数组。

#include <stdio.h>
void sort(int *s,int len)		//冒泡排序 
{
	int i,j;
	int t;
	for ( i=0; i<len-1; i++ )
		for ( j=0; j<len-1-i; j++ )
			if ( s[j]>s[j+1] )
			{
				t=s[j];
				s[j]=s[j+1];
				s[j+1]=t;
			}		
}
int two_search(int *s,int len,int aim)		//二分法查找 
{
	int ret=-1;
	int left=0,right=len-1;
	while (left<=right)
	{
		int mid=left+(right-left)/2;
		if (s[mid]==aim) 
		{
			ret=mid;
			break;
		} 
		else if ( s[mid]<aim )
			left=mid+1;						//left=mid+1,right=mid-1 防止出现死循环 
		else if ( s[mid]>aim )
			right=mid-1;
	}
	return ret;
}
int main()
{
	int array[101],target,id;
	int len;
	scanf("%d",&len);           //define数组length 
	int i;
	for ( i=0; i<len; i++ )     //输入乱序数组元素 
		scanf("%d",array+i);
		
	sort(array,len);			//数组从小到大排序 
	
	for ( i=0; i<len; i++ )		//输出排序后的数组 
	{
		printf("%d",array[i]);
		if ( i==len-1 )
			printf("\n");
		else 
			printf(" ");
	}
		
	while (scanf("%d",&target)!=EOF)	//查找排序后数组的元素位置(若无此元素,则为-1) 
	{
		id = two_search(array,len,target);
		printf("%d\n",id);
	}
}
	
	

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值