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;
}