工作了一段时间了,偶尔看到数据结构,觉得有些陌生,毕竟工作上用的比较少,如果在这样下去可能,大学学的算法和数据结构就会忘光了,必须每天练练手了。
给自己的要求也不高,有空的时候就写个小程序,然后放到blog里,注明应该注意的地方,以后看起来也应该比较方便
原文地址:http://blog.csdn.net/lengzijian/article/details/8017630
/*
改代码主要来源于《编程之美》3.11
发现自己写相同代码时,存在相同问题。
这里记录下容易犯下的错误,
并且写下可执行代码,方便大家学习。
*/
#include <stdio.h>
#include <string.h>
int bisearch(char **arr, int b, int e, char *v)
{
int midIndex;
int minIndex = b;
int maxIndex = e;
printf("v---->%s\n",v);
if(minIndex > maxIndex)
{
return -1;
}
while(minIndex < maxIndex - 1)
{
//这里我也用了minIndex + maxIndex 的方式
//书上说:大数时,会导致和为负数
midIndex = minIndex + ( maxIndex - minIndex ) / 2;
if(strcmp(arr[midIndex], v) <= 0)
{
minIndex = midIndex;
}
else
{
maxIndex = midIndex ;
}
}
//想想为什么不在while里直接加判断等于的操作?
//直接在while循环里面判断:①先判断是否小于②判断是否大于③判断是否等于
//因为while循环里面的操作会增加。仔细想一想!!
if(!strcmp(arr[maxIndex], v))
{
return maxIndex;
}
else if(!strcmp(arr[minIndex], v))
{
return minIndex;
}
else
{
return -2;
}
}
int main ()
{
char *arr[10] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
char *c = "8";
int a = 0;
a = bisearch(arr,0,9,c);
printf("find-->%d\n",a);
}