折半查找
2013-05-03 11:10
387 查看
1.概念
折半查找也叫二分查找,前提是待查找的数组必须是有序的,假设数组是从小到大排列的,先将待查找的值和有序数组的中间值比较,如果相等则找到,若小于中间值则查找左半部分,若大于中间值则查找右半部分。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
2.实现
/// <summary>
/// 折半查找
/// </summary>
public class BinarySearch
{
/// <summary>
/// 待查找数组
/// </summary>
public int[] arr { get; set; }
/// <summary>
/// 递归法
/// </summary>
public void TraservalSearch(int left,int right,int value)
{
if (arr == null)
{
Console.WriteLine("未找到");
return;
}
if (left < right)
{
int mid = (left + right) / 2;
if (value == arr[mid])
{
Console.WriteLine("找到了" + mid);
return;
}
else if (value < arr[mid])
{
TraservalSearch(left, mid - 1, value);
}
else
{
TraservalSearch(mid + 1, right, value);
}
}
else
{
Console.WriteLine("未找到");
}
}
/// <summary>
/// 非递归
/// </summary>
public void Search(int value)
{
if (arr == null)
{
Console.WriteLine("未找到");
return;
}
int left = 0;
int right = arr.Length - 1;
while (left < right)
{
int mid = (left + right) / 2;
if (arr[mid] == value)
{
Console.WriteLine("找到了" + mid);
return;
}
else if (arr[mid] > value)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
Console.WriteLine("未找到");
}
}
折半查找也叫二分查找,前提是待查找的数组必须是有序的,假设数组是从小到大排列的,先将待查找的值和有序数组的中间值比较,如果相等则找到,若小于中间值则查找左半部分,若大于中间值则查找右半部分。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
2.实现
/// <summary>
/// 折半查找
/// </summary>
public class BinarySearch
{
/// <summary>
/// 待查找数组
/// </summary>
public int[] arr { get; set; }
/// <summary>
/// 递归法
/// </summary>
public void TraservalSearch(int left,int right,int value)
{
if (arr == null)
{
Console.WriteLine("未找到");
return;
}
if (left < right)
{
int mid = (left + right) / 2;
if (value == arr[mid])
{
Console.WriteLine("找到了" + mid);
return;
}
else if (value < arr[mid])
{
TraservalSearch(left, mid - 1, value);
}
else
{
TraservalSearch(mid + 1, right, value);
}
}
else
{
Console.WriteLine("未找到");
}
}
/// <summary>
/// 非递归
/// </summary>
public void Search(int value)
{
if (arr == null)
{
Console.WriteLine("未找到");
return;
}
int left = 0;
int right = arr.Length - 1;
while (left < right)
{
int mid = (left + right) / 2;
if (arr[mid] == value)
{
Console.WriteLine("找到了" + mid);
return;
}
else if (arr[mid] > value)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
Console.WriteLine("未找到");
}
}
相关文章推荐
- 数学问题(2):折半查找
- 冒泡排序 选择排序 折半查找
- 第十四周项目1线性表得折半查找
- 黑马程序员_JavaSE基础06 之 数组的操作 求最值 排序 折半查找
- 利用C语言实现折半查找
- PAT基础题 4-13 折半查找
- 折半查找
- 数据结构与算法_折半查找
- C语言 数据结构查找 顺序查找及折半查找
- 折半(二分)查找
- 折半查找
- 静态查找——折半查找
- 有序表查找(折半,插值,斐波那契).c
- 纯C语言:折半查找源码分享
- 第十四周项目一 (1)验证算法——折半查找
- 七、递归-折半查找
- 静态表查找--顺序表的查找(有序)--折半查找
- 第十四周项目1验证折半查找
- 算法:顺序查找与折半查找
- 二分法(折半)查找java实现