1,顺序查找法
虽然很简单,但很强大,当然只在小数量下。
2,改良型顺序查找法
现在很多的拼音输入法都有一个特性,像Google拼音,经常用到的字或词通常都在最前面,这就是大名鼎鼎的28规则的实际应用。把最常用的20%的字词放到最前面,是很睿智的做法,大多数情况下找到一个字不会要用户翻几下。如果有一个无序且不小的数组或列表的需要进行多次查找,那我们也可以把28规则用到项目中了,这样最经常被查找的数据都会集中前部,加快查找的速度。代码:
public class Example
{
int[] arr;
int upper;public int this[int index]
{
get
{
return arr[index];
}
}public Example(int size)
{
upper = size -1;
arr = new int[size];
Random rand = new Random();
for (int i = 0; i < size; i++)
{
arr[i] = rand.Next(upper);
}
}public int Search(int val)
{
for (int i = 0; i <= upper; i++)
{
if (val == arr[i])
{
if (i > (upper * 0.2))
{
Swap(i, 0);
}
return i;
}
}
return -1;
}private void Swap(int idx1, int idx2)
{
int temp = arr[idx1];
arr[idx1] = arr[idx2];
arr[idx2] = temp;
}}
3,二分查找法
使用二分查找法的前提条件是数据是有序的。如果无序,有时搜得到,有时搜不到。二分查找法有个特性,数据量越是大,查得就越快,时间复杂度为1/2(n2-n)。其思想就是重复缩小查找范围,较上次缩小一倍,直到查到要查询的值或退出查找。
public class Example
{
int[] arr;
int upper;
public int this[int index]
{
get
{
return arr[index];
}
}
public Example(int size)
{
upper = size -1;
arr = new int[size];
Random rand = new Random();
for (int i = 0; i < size; i++)
{
//arr[i] = rand.Next(upper);
arr[i] = i;}
}
public int Search(int val)
{
for (int i = 0; i <= upper; i++)
{
if (val == arr[i])
{
if (i > (upper * 0.2))
{
Swap(i, 0);
}
return i;
}
}
return -1;
}
private void Swap(int idx1, int idx2)
{
int temp = arr[idx1];
arr[idx1] = arr[idx2];
arr[idx2] = temp;
}
public int BinarySearch(int val)
{
int mid, min = 0;
int max = upper;
while (min <= max)
{
mid = (max + min) / 2;
if (arr[mid] == val)
{
return mid;
}
else if (arr[mid] < val)
{
min = mid + 1;
}
else
{
max = mid - 1;
}
}
return -1;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?