您的位置:首页 > 其它

二分法查找

2012-03-08 15:34 176 查看
本文转至:http://blog.csdn.net/fengyarongaa/article/details/6563184



[c-sharp]
view plaincopyprint?

/// <summary>

/// 二分查找算法
/// </summary>

/// <param name="arr">要查找的数组</param>

/// <param name="sel">要查找的值</param>

/// <returns></returns>

protected
string GetValue(string[] arr,
string sel)
{
int langth = arr.Length;//数组的长度

int min = 0;//要查找的数组的下限

int max = langth - 1;//要查找的数组的上限

int index = (max - min) / 2 + min;//要查找的索引

string returnValue =
"";//最后要返回的值

int flag = 0;//比较的时候,之前的那个index

if (int.Parse(sel) ==
int.Parse(arr[min].ToString()))

{
returnValue = "最小值和要查的值一样,是:" + min.ToString();

}
else
if (int.Parse(sel) ==
int.Parse(arr[max].ToString()))

{
returnValue = "最大值和要查的值一样,是:" + max.ToString();

}
else
if (int.Parse(sel) >
int.Parse(arr[langth - 1].ToString()))

{
returnValue = "大于最大值了";

}
else
if (int.Parse(sel) <
int.Parse(arr[0].ToString()))
{
returnValue = "小于最小值了";

}
else

{
do

{
if (int.Parse(arr[index].ToString()) ==
int.Parse(sel))
{
returnValue +=
"找到了:" + arr[index].ToString() + "
";

}
else
if (int.Parse(arr[index].ToString()) >
int.Parse(sel))
{
max = index;
flag = index;
index = (max - min) / 2 + min;

returnValue += "是数组中的" + arr[flag].ToString() +
"和" + sel + "比较,数组的比较值大了,找前面一个表:" + arr[min].ToString() +
"到" + arr[max].ToString() + "
";
}
else
if (int.Parse(arr[index].ToString()) <
int.Parse(sel))
{
min = index;
flag = index;
index = (max - min) / 2 + min;

returnValue += "是数组中的" + arr[flag].ToString() +
"和" + sel + "比较,数组的比较值小了,找后面一个表:" + arr[min].ToString() +
"到" + arr[max].ToString() + "
";
}
if (max - min <= 1)

{
returnValue +=
"找不到";
break;

}
} while (int.Parse(arr[index].ToString()) !=
int.Parse(sel));
}

//防止那种,在更改过索引值之后,正好索引的值和要查找的值相等的情况

if (int.Parse(arr[index].ToString()) ==
int.Parse(sel))
{
returnValue += "找到了:" + index.ToString() + "

";
}

return returnValue;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: