您的位置:首页 > 理论基础 > 数据结构算法

《数据结构与算法C#语言描述》笔记4_基础查找算法

2012-10-07 23:47 302 查看

四.基础查找算法

顺序查找(线性查找)

集合无序状态下进行顺次查找。

“80-20”规则

在数据集合上80%的查找操作都是为了查找数据集合20%的数据。这样的概率分布,被称为帕累托(Pareto)分布。

自组织将最终把20%的数据集放在数据集合的开始部分,这样顺序查找可以快速找到。

自组织数据加快顺序查找

基于“80-20”法则,有两种方法实现加快查找。

static
void swap<T>(refT item1,ref T item2)
{
T temp = item1;
item1 = item2;
item2 = temp;
}

1.位置在前20%外的目标元素和第一个元素进行位置交换

intfindvalue=64;
for(int i = 0; i < a.Length; i++)
{
if(a[i] == findvalue)
{
if((double)i > (double)(a.Length* 0.2))
{ swap<int>(ref a[i],ref a[0]); }
}
}

2.目标元素位置提前一个

for(int i = 0; i < a.Length; i++)
{
if(a[i] == findvalue)
{
if(i > 0)
{ swap<int>(ref a[i],refa[i-1]); }
}
}

二叉树查找

有序排列的集合,始终判断中间点数值的大、小、等于。

递归二叉树算法

递归算法始终比迭代算法慢。

findIndex = RecursionRbinSearch(a,37,0,a.Length-1);

intRecursionRbinSearch(int[] a,int value,
int lower,int upper)
{
if(lower > upper)
{ return-1; }
else
{
intmid = (int)(upper + lower) / 2;
if(a[mid] == value)
{ returnmid; }
elseif (value < a[mid])
{ returnRecursionRbinSearch(a, value, lower, mid - 1); }
else
{ returnRecursionRbinSearch(a, value, mid + 1, upper); }
}
}

迭代二叉树算法



Array类的内置二叉树查找方法

public staticintBinarySearch<T>(T[] array, T value);
例:

intfindIndex =
Array.BinarySearch<int>(a, 4);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: