成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#常見的四種經典查找算法

開發 前端
線性查找算法是一種簡單的查找算法,用于在一個數組或列表中查找一個特定的元素。它從數組的第一個元素開始,逐個檢查每個元素,直到找到所需的元素或搜索完整個數組。線性查找的時間復雜度為O(n),其中n是數組中的元素數量。

前言

在編程領域,數據結構與算法是構建高效、可靠和可擴展軟件系統的基石。它們對于提升程序性能、優化資源利用以及解決復雜問題具有至關重要的作用。今天大姚給大家分享四種C#中常見的經典查找算法。

C#二分查找算法

簡介

二分查找算法是一種在有序數組中查找特定元素的搜索算法。

代碼實現

public class 二分查找算法
    {
        /// <summary>
        /// 二分查找算法
        /// </summary>
        /// <param name="arr">arr是已排序的數組</param>
        /// <param name="target">target是要查找的目標值</param>
        /// <returns>目標值在數組中的索引,如果未找到則返回-1</returns>
        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;
                }
            }

            // 未找到 target,返回-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}");
            }
        }

        /// <summary>
        /// 線性查找函數
        /// </summary>
        /// <param name="arr">arr</param>
        /// <param name="target">target</param>
        /// <returns></returns>
        public static int LinearSearch(int[] arr, int target)
        {
            // 遍歷數組
            for (int i = 0; i < arr.Length; i++)
            {
                // 如果找到目標值,返回其索引
                if (arr[i] == target)
                {
                    return i;
                }
            }
            // 如果沒有找到,則返回-1
            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)); // 輸出: True
            Console.WriteLine("Search for 25: " + bst.Search(25)); // 輸出: False

            Console.WriteLine("\n");

            // 刪除某個值
            bst.Delete(50);
            Console.WriteLine("刪除50后:");
            bst.InorderTraversal();
        }
    }

    /// <summary>
    /// 定義二叉搜索樹的節點結構
    /// </summary>
    public class TreeNode
    {
        public int Value;
        public TreeNode Left;
        public TreeNode Right;

        public TreeNode(int value)
        {
            Value = value;
            Left = null;
            Right = null;
        }
    }

    /// <summary>
    /// 定義二叉搜索樹類
    /// </summary>
    public class BinarySearchTree
    {
        private TreeNode root;

        public BinarySearchTree()
        {
            root = null;
        }

        #region 插入節點

        /// <summary>
        /// 插入新值到二叉搜索樹中
        /// </summary>
        /// <param name="value">value</param>
        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 查找節點

        /// <summary>
        /// 查找某個值是否存在于二叉搜索樹中
        /// </summary>
        /// <param name="value">value</param>
        /// <returns></returns>
        public bool Search(int value)
        {
            return SearchRec(root, value);
        }

        private bool SearchRec(TreeNode node, int value)
        {
            // 如果當前節點為空,表示未找到目標值
            if (node == null)
            {
                return false;
            }

            // 如果找到目標值,返回true
            if (node.Value == value)
            {
                return true;
            }

            // 遞歸查找左子樹或右子樹
            if (value < node.Value)
            {
                return SearchRec(node.Left, value);
            }
            else
            {
                return SearchRec(node.Right, value);
            }
        }

        #endregion

        #region 中序遍歷

        /// <summary>
        /// 中序遍歷(打印有序數組)
        /// </summary>
        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 刪除節點

        /// <summary>
        /// 刪除某個值
        /// </summary>
        /// <param name="val">val</param>
        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;
        }

        /// <summary>
        /// 找到樹中的最小節點
        /// </summary>
        /// <param name="node"></param>
        /// <returns></returns>
        private TreeNode FindMin(TreeNode node)
        {
            while (node.Left != null)
            {
                node = node.Left;
            }
            return node;
        }

        #endregion
    }
}

C#哈希查找算法

簡介

哈希查找算法是一種高效的查找算法,通過將鍵值映射到哈希表中的位置來實現快速訪問。在C#中,哈希查找通常通過哈希表(Hashtable)或字典(Dictionary)來實現。

代碼實現

public class 哈希查找算法
    {
        /// <summary>
        /// 哈希查找函數
        /// </summary>
        /// <param name="target">target</param>
        public static void HashSearchFunctionRun(int target)
        {
            //創建一個字典來存儲鍵值對
            var dic = new Dictionary<int, string>();
            dic.Add(1, "one");
            dic.Add(2, "two");
            dic.Add(3, "three");

            //查找目標值是否在Dictionary中存在
            //TryGetValue方法可以返回一個bool值和值,如果找到了目標值,則返回true和對應的值,否則返回false和默認值
            string value;
            if (dic.TryGetValue(target, out value))
            {
                Console.WriteLine("Found Data: " + value);
            }
            else
            {
                Console.WriteLine("Not Found Data.");
            }
        }
    }


責任編輯:武曉燕 來源: 追逐時光者
相關推薦

2009-09-08 17:20:01

C#排序算法

2009-08-26 15:04:35

C#轉換

2024-02-28 09:22:03

限流算法數量

2009-08-20 09:52:31

C#參數類型

2009-08-27 15:00:55

C#線程控制

2011-11-24 16:34:39

Java

2009-08-05 14:09:04

C#日期轉換

2009-09-22 14:20:39

C#播放聲音

2009-09-17 16:55:58

C#組件設計

2021-06-04 10:45:31

軟件架構分布式

2024-06-24 01:00:00

2021-08-11 20:17:22

推薦算法系統

2017-07-14 16:28:21

2010-08-13 13:31:48

Flex效果組件

2024-05-29 13:18:12

線程Thread?方式

2021-06-24 17:55:40

Python 開發編程語言

2011-06-30 14:45:52

外鏈

2024-11-07 11:17:50

2021-08-12 11:37:23

數據分析錯誤

2015-03-19 15:13:20

PHP基本排序算法代碼實現
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩欧美国产精品 | 91人人在线| 欧美精品三区 | 久久夜夜 | 日韩快播电影网 | 久久精品小视频 | 99热都是精品 | 欧美日韩亚洲一区 | 999www视频免费观看 | 伊人伊人 | 日本一区二区不卡 | 人人天天操 | 99精品欧美一区二区三区 | 激情av| 亚洲免费一 | 一本在线 | 日韩精品一区二区三区视频播放 | 成人免费视频网站在线看 | 亚洲精品欧美 | 国产午夜影院 | 国产99视频精品免费播放照片 | 91久久久久 | 精品乱码一区二区三四区视频 | 婷婷精品| 在线国产精品一区 | 国产精品成人品 | 中文字幕精品一区二区三区精品 | 婷婷久久网 | 国产精品日本一区二区在线播放 | 偷拍亚洲色图 | 91欧美 | 天天综合网永久 | 一区二区播放 | 国产高清在线精品一区二区三区 | 91精品国产91久久久久久吃药 | 日本免费一区二区三区 | 秋霞电影一区二区 | 亚洲精品福利在线 | 免费毛片网 | 欧美成视频在线观看 | 亚洲一区中文字幕 |