二、基础查找算法
有两种对列表内数据进行查找的方法,顺序查找和二叉查找。当数据项在列表内随机排列的时候可以用顺序查找,当数据在列表内有序排列的时候则会用到二叉查找。(抄点书上原话:助于理解,哈哈。)
(一)顺序查找
最常见的查找类型就是从记录集的开始出顺次遍历每条记录,直到找到所要的记录或者是达到数据集的末尾,这就是顺序查找。顺序查找是非常容易实现的,从数组的起始处开始,把每个访问到的数组元素一次和所需要查找的数值进行比较,如果相同就说明找到了,否者就没有找到。代码 如下:
/// <summary>
/// 顺序查找
/// </summary>
/// <param name="arr"></param>
/// <param name="searchNum"></param>
/// <returns></returns>
static int SeqSearch(int[] arr,int searchNum)
{
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == searchNum)
return i;
}
return -1;
}
/// 顺序查找
/// </summary>
/// <param name="arr"></param>
/// <param name="searchNum"></param>
/// <returns></returns>
static int SeqSearch(int[] arr,int searchNum)
{
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] == searchNum)
return i;
}
return -1;
}
有时候我们需要查找最小值和最大值,在一个有序的数组中查找最小和最大值是非常容易的,但是往往一般数组都是无序的,对于无序的数组我们的算法是(假如我们要找最大值):
- 把数组的第一个元素作为最大值给一个变量。
- 开始循环遍历数组,把他之后的每一个数和设定的最大值进行比较,如果比最大值还大,那么他们进行交换。
- 当循环结束后,返回的值便是最大的值。
代码如下:
/// <summary>
/// 查找最大最小
/// </summary>
/// <param name="arr">数组</param>
/// <param name="findType">查找类型,0查找最大,1查找最小</param>
/// <returns></returns>
static int Find(int[] arr, int findType)
{
//找最大值
if (findType == 0)
{
int big = arr[0];
for (int i = 1; i < arr.Length; i++)
{
if (arr[i] > big)
{
big = arr[i];
}
}
return big;
}
else if (findType == 1)
{
int min = arr[0];
for (int i = 1; i < arr.Length; i++)
{
if (arr[i] < min)
{
min = arr[i];
}
}
return min;
}
else
{
return -1;
}
}
/// 查找最大最小
/// </summary>
/// <param name="arr">数组</param>
/// <param name="findType">查找类型,0查找最大,1查找最小</param>
/// <returns></returns>
static int Find(int[] arr, int findType)
{
//找最大值
if (findType == 0)
{
int big = arr[0];
for (int i = 1; i < arr.Length; i++)
{
if (arr[i] > big)
{
big = arr[i];
}
}
return big;
}
else if (findType == 1)
{
int min = arr[0];
for (int i = 1; i < arr.Length; i++)
{
if (arr[i] < min)
{
min = arr[i];
}
}
return min;
}
else
{
return -1;
}
}
浙公网安备 33010602011771号