二分法查找
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;
}
[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;
}
相关文章推荐
- 二维数组, 二分法查找数组元素下标 快速查找数组最大值 数组作为实参的问题
- 二分法查找
- 二分法查找
- 二分法查找实现
- 二分法查找
- 使用不同方法查找数组中某个特定值,并计算时间(改正二分法查找错误和数组转化集合错误)
- java实现二分法查找
- java学习-算法2--二分法查找
- c语言中二分法查找的升级版--折半查找法
- 二分法查找
- 黑马程序员--选择排序、冒泡排序、二分法查找
- 用二分法查找数组中的下标
- 算法学习之查找(顺序、二分法、排序二叉树以及 Hash 表)
- JAVA-二分法查找算法总结
- 二分法查找
- 用PHP实现二分法查找之递归和迭代
- 算法第4版(谢路云译)学习笔记(4) -- 二分法查找算法的分析解释
- 【C语言】二分法实现数组查找
- js冒泡排序及二分法查找
- 二维数组的二分法查找