C#二分查找算法
简介
二分查找算法是一种在有序数组中查找特定元素的搜索算法。
代码实现
public class 二分查找算法
    {
        
        
        
        
        
        
        public static int BinarySearch(int[] arr, int target)
        {
            int left = 0; 
            int right = arr.Length - 1; 
            while (left <= right)
            {
                
                int mid = left + (right - left) / 2;
                if (arr[mid] == target)
                {
                    
                    return mid; 
                }
                else if (arr[mid] < target)
                {
                    
                    left = mid + 1;
                }
                else
                {
                    
                    right = mid - 1;
                }
            }
            
            return -1;
        }
        public static void BinarySearchRun()
        {
            int[] arr = { 1, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59 }; 
            int target = 31; 
            int result = BinarySearch(arr, target); 
            if (result == -1)
            {
                Console.WriteLine("元素未找到");
            }
            else
            {
                Console.WriteLine($"元素找到,索引为:{result},值为:{arr[result]}");
            }
        }
    }
C#线性查找算法
简介
线性查找算法是一种简单的查找算法,用于在一个数组或列表中查找一个特定的元素。它从数组的第一个元素开始,逐个检查每个元素,直到找到所需的元素或搜索完整个数组。线性查找的时间复杂度为O(n),其中n是数组中的元素数量。
代码实现
  public static void LinearSearchRun()
        {
            int[] arr = { 2, 3, 4, 10, 40, 50, 100, 77, 88, 99 };
            int target = 100;
            int result = LinearSearch(arr, target);
            
            if (result == -1)
            {
                Console.WriteLine("元素未找到");
            }
            else
            {
                Console.WriteLine($"元素在索引 {result} 处找到,index = {result}");
            }
        }
        
        
        
        
        
        
        public static int LinearSearch(int[] arr, int target)
        {
            
            for (int i = 0; i < arr.Length; i++)
            {
                
                if (arr[i] == target)
                {
                    return i;
                }
            }
            
            return -1;
        }
C#二叉搜索树算法
简介
二叉搜索树(Binary Search Tree,简称BST)是一种节点有序排列的二叉树数据结构。
代码实现
namespace HelloDotNetGuide.常见算法
{
    public class 二叉搜索树算法
    {
        public static void BinarySearchTreeRun()
        {
            var bst = new BinarySearchTree();
            
            bst.Insert(50);
            bst.Insert(30);
            bst.Insert(20);
            bst.Insert(40);
            bst.Insert(70);
            bst.Insert(60);
            bst.Insert(80);
            bst.Insert(750);
            Console.WriteLine("中序遍历(打印有序数组):");
            bst.InorderTraversal();
            Console.WriteLine("\n");
            
            Console.WriteLine("Search for 40: " + bst.Search(40)); 
            Console.WriteLine("Search for 25: " + bst.Search(25)); 
            Console.WriteLine("\n");
            
            bst.Delete(50);
            Console.WriteLine("删除50后:");
            bst.InorderTraversal();
        }
    }
    
    
    
    public class TreeNode
    {
        public int Value;
        public TreeNode Left;
        public TreeNode Right;
        public TreeNode(int value)
        {
            Value = value;
            Left = null;
            Right = null;
        }
    }
    
    
    
    public class BinarySearchTree
    {
        private TreeNode root;
        public BinarySearchTree()
        {
            root = null;
        }
        #region 插入节点
        
        
        
        
        public void Insert(int value)
        {
            if (root == null)
            {
                root = new TreeNode(value);
            }
            else
            {
                InsertRec(root, value);
            }
        }
        private void InsertRec(TreeNode node, int value)
        {
            if (value < node.Value)
            {
                if (node.Left == null)
                {
                    node.Left = new TreeNode(value);
                }
                else
                {
                    InsertRec(node.Left, value);
                }
            }
            else if (value > node.Value)
            {
                if (node.Right == null)
                {
                    node.Right = new TreeNode(value);
                }
                else
                {
                    InsertRec(node.Right, value);
                }
            }
            else
            {
                
                return;
            }
        }
        #endregion
        #region 查找节点
        
        
        
        
        
        public bool Search(int value)
        {
            return SearchRec(root, value);
        }
        private bool SearchRec(TreeNode node, int value)
        {
            
            if (node == null)
            {
                return false;
            }
            
            if (node.Value == value)
            {
                return true;
            }
            
            if (value < node.Value)
            {
                return SearchRec(node.Left, value);
            }
            else
            {
                return SearchRec(node.Right, value);
            }
        }
        #endregion
        #region 中序遍历
        
        
        
        public void InorderTraversal()
        {
            InorderTraversalRec(root);
        }
        private void InorderTraversalRec(TreeNode root)
        {
            if (root != null)
            {
                InorderTraversalRec(root.Left);
                Console.WriteLine(root.Value);
                InorderTraversalRec(root.Right);
            }
        }
        #endregion
        #region 删除节点
        
        
        
        
        public void Delete(int val)
        {
            root = DeleteNode(root, val);
        }
        private TreeNode DeleteNode(TreeNode node, int val)
        {
            if (node == null)
            {
                return null;
            }
            if (val < node.Value)
            {
                node.Left = DeleteNode(node.Left, val);
            }
            else if (val > node.Value)
            {
                node.Right = DeleteNode(node.Right, val);
            }
            else
            {
                
                if (node.Left != null && node.Right != null)
                {
                    
                    TreeNode minNode = FindMin(node.Right);
                    node.Value = minNode.Value;
                    node.Right = DeleteNode(node.Right, minNode.Value);
                }
                
                else
                {
                    TreeNode? temp = node.Left != null ? node.Left : node.Right;
                    node = temp;
                }
            }
            return node;
        }
        
        
        
        
        
        private TreeNode FindMin(TreeNode node)
        {
            while (node.Left != null)
            {
                node = node.Left;
            }
            return node;
        }
        #endregion
    }
}
C#哈希查找算法
简介
哈希查找算法是一种高效的查找算法,通过将键值映射到哈希表中的位置来实现快速访问。在C#中,哈希查找通常通过哈希表(Hashtable)或字典(Dictionary)来实现。
代码实现
 public class 哈希查找算法
    {
        
        
        
        
        public static void HashSearchFunctionRun(int target)
        {
            
            var dic = new Dictionary<int, string>();
            dic.Add(1, "one");
            dic.Add(2, "two");
            dic.Add(3, "three");
            
            
            string value;
            if (dic.TryGetValue(target, out value))
            {
                Console.WriteLine("Found Data: " + value);
            }
            else
            {
                Console.WriteLine("Not Found Data.");
            }
        }
    }
该文章在 2024/10/24 17:06:26 编辑过