一个开源且全面的C#算法实战教程
创作时间:
作者:
@小白创作中心
一个开源且全面的C#算法实战教程
引用
1
来源
1.
https://www.cnblogs.com/Can-daydayup/p/18244728
算法在计算机科学和程序设计中扮演着至关重要的角色,如在解决问题、优化效率、决策优化、实现计算机程序、提高可靠性以及促进科学融合等方面具有广泛而深远的影响。今天给大家分享一个开源、免费、全面的C#算法实战教程:TheAlgorithms/C-Sharp。
项目介绍
TheAlgorithms/C-Sharp是一个C#实现的各种算法集合,这些算法涵盖了计算机科学、数学和统计学、数据科学、机器学习、工程等多个领域。这些实现及其相关文档旨在为教育工作者和学生提供学习资源。因此,可能会找到针对同一目标使用不同算法策略和优化的多种实现。
主要算法包括
- 排序算法:冒泡排序、插入排序、计数排序、快速排序等
- 搜索算法:线性搜索、二分搜索等
- 数值计算:最大公约数、二项式系数、牛顿的平方根计算、欧拉方法等
- 字符串算法:Rabin-Karp 算法、KMP 算法、Manacher 算法等
- 数据结构:链表 (Linked List)、栈 (Stack)、队列 (Queue)、二叉树 (Binary Tree)等
- 图算法:深度优先搜索 (Depth-First Search)、广度优先搜索 (Breadth-First Search)、Dijkstra 最短路径等
- 等等......
插入排序
/// <summary>
/// Class that implements insertion sort algorithm.
/// </summary>
/// <typeparam name="T">Type of array element.</typeparam>
public class InsertionSorter<T> : IComparisonSorter<T>
{
/// <summary>
/// Sorts array using specified comparer,
/// internal, in-place, stable,
/// time complexity: O(n^2),
/// space complexity: O(1),
/// where n - array length.
/// </summary>
/// <param name="array">Array to sort.</param>
/// <param name="comparer">Compares elements.</param>
public void Sort(T[] array, IComparer<T> comparer)
{
for (var i = 1; i < array.Length; i++)
{
for (var j = i; j > 0 && comparer.Compare(array[j], array[j - 1]) < 0; j--)
{
var temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
}
}
}
}
快速排序
/// <summary>
/// Sorts arrays using quicksort.
/// </summary>
/// <typeparam name="T">Type of array element.</typeparam>
public abstract class QuickSorter<T> : IComparisonSorter<T>
{
/// <summary>
/// Sorts array using Hoare partition scheme,
/// internal, in-place,
/// time complexity average: O(n log(n)),
/// time complexity worst: O(n^2),
/// space complexity: O(log(n)),
/// where n - array length.
/// </summary>
/// <param name="array">Array to sort.</param>
/// <param name="comparer">Compares elements.</param>
public void Sort(T[] array, IComparer<T> comparer) => Sort(array, comparer, 0, array.Length - 1);
protected abstract T SelectPivot(T[] array, IComparer<T> comparer, int left, int right);
private void Sort(T[] array, IComparer<T> comparer, int left, int right)
{
if (left >= right)
{
return;
}
var p = Partition(array, comparer, left, right);
Sort(array, comparer, left, p);
Sort(array, comparer, p + 1, right);
}
private int Partition(T[] array, IComparer<T> comparer, int left, int right)
{
var pivot = SelectPivot(array, comparer, left, right);
var nleft = left;
var nright = right;
while (true)
{
while (comparer.Compare(array[nleft], pivot) < 0)
{
nleft++;
}
while (comparer.Compare(array[nright], pivot) > 0)
{
nright--;
}
if (nleft >= nright)
{
return nright;
}
var t = array[nleft];
array[nleft] = array[nright];
array[nright] = t;
nleft++;
nright--;
}
}
}
线性搜索
/// <summary>
/// Class that implements linear search algorithm.
/// </summary>
/// <typeparam name="T">Type of array element.</typeparam>
public class LinearSearcher<T>
{
/// <summary>
/// Finds first item in array that satisfies specified term
/// Time complexity: O(n)
/// Space complexity: O(1).
/// </summary>
/// <param name="data">Array to search in.</param>
/// <param name="term">Term to check against.</param>
/// <returns>First item that satisfies term.</returns>
public T Find(T[] data, Func<T, bool> term)
{
for (var i = 0; i < data.Length; i++)
{
if (term(data[i]))
{
return data[i];
}
}
throw new ItemNotFoundException();
}
/// <summary>
/// Finds index of first item in array that satisfies specified term
/// Time complexity: O(n)
/// Space complexity: O(1).
/// </summary>
/// <param name="data">Array to search in.</param>
/// <param name="term">Term to check against.</param>
/// <returns>Index of first item that satisfies term or -1 if none found.</returns>
public int FindIndex(T[] data, Func<T, bool> term)
{
for (var i = 0; i < data.Length; i++)
{
if (term(data[i]))
{
return i;
}
}
return -1;
}
}
更多项目实用功能和特性欢迎前往项目开源地址查看,别忘了给项目一个Star支持。
GitHub开源地址:https://github.com/TheAlgorithms/C-Sharp
热门推荐
中西医结合治疗ADHD:脑电生物反馈、中医调理与心理干预的协同效应
北京、天津、成都三地公租房申请条件详解
普通3D和IMAX 3D的区别
减负实践:如何在日常生活中实现轻松生活
揭秘冷锻成形工艺:如何提升螺栓头部强度与精度
金庸笔下天下第一的王重阳 为何48岁慨然入道?
牙健康,跟“吃”有关吗?
独处的力量:打造专属心灵阅读角落的实用指南
卤牛肉的做法和步骤是什么(最简单的卤牛肉方法)
掌握雅思考试通过率的关键因素
《红楼梦》中女性形象塑造的文学价值研究
如何正确识别一排三个红绿灯的信号?这种识别方法对行车安全有何重要性?
如何查看和选择适合自己的笔记本电脑配置指南
血压手表对比,dido与华为等3款手表、为父母选择最合适的健康监测助手
呕吐腹泻时,这些食物有助于缓解症状
如何查找并查看U盘中存储的照片?
专家解读:孩子长高全攻略
高明领导如何带团队
宠物护理基础知识:给予它们最佳的生活环境
新生儿肺炎是怎么引起的原因
如何帮助帕金森病患者改善生活质量?
文化中国行 | 堨坝“徽州智慧”流淌千年
血糖高吃什么食物和水果最好?降血糖的食物大全一览表
性格缺失乐队|旷野的规则是永不回头
如何提高居民安全防范意识
为什么日本动漫能风靡全球?从历史到魅力的深度解析
数据库中集合运算都有什么
2025年十大最佳在线创业项目,助您增加收入
产权车位和使用权车位的区别及小区车位产权解析
《偏光片工艺图》课件