c基础(7)——两个算法:逆置和二分

1.数组逆置算法的核心

例:“Here is Tulun”==》“Tulun is Here”

char * Reserve_all(char *str)//假设整体逆置的算法Reserve已存在
{	assert(str!= NULL );
	Reserve(str, str +(strlen(str)-1));	//整体逆置
	char *begin = str;	
	char *end = str;	
	while (*begin != '\0')	
	{		if(*begin == ' ')	//若遇空格,包括连续空格,整体向前移动。
			{	
				++begin;			
				++end;		
			}		
			else if (!isalpha(*end))//末尾不为字符		
			{			
				Reserve(begin, --end);//end-1是因为end此时保存的只是一个空格。
				++end;			//end+1回到原来的位置。
				begin = end;		//begin=end,开始下一个过程。
			}		
			else 	
			{		
				++end;	//end向前遍历。
			}	
	}	
	return str;
}

2.二分查找算法

二分查找亦称为折半查找,二分查找必须要求数组时有序的。

int BinSerach(int *a, int len,int val)
{
 assert(len >0 );
 int low = 0;
 int high = len;
 int mid = high>>1;//比乘除快。右移1位,相当于除去2.
 while (low <= high)
 {
  	mid = (high - low) / 2;
  	if (a[mid] == val)
  	{
  		 return mid;
 	}
  	else if (a[mid] > val)	
	 {
   		high = mid-1;
 	 }
 	 else
  	{
  		 low = mid + 1;
  	}
 }
 return -1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值