zoukankan      html  css  js  c++  java
  • 查找算法

    集合(System.Collections)

    分为线性集合和非线性集合

    线性集合

    线性集合:直接存储集合,顺序存储集合(链表,双向链表)

    直接存储集合:数组,字符串,Struct结构体

    顺序存储集合(链表,双向链表):栈,队列,Dictionary

    非线性集合

    非线性集合:树,堆,图,集

    层次集合:树(红黑树,二叉树,堆(最小的值放到根节点上,会重组元素))

    组集合:无序的数据组成的非线性集合被称为组,Set集合,图(旅行商),网络

    CollectionBase,ICollection,IEnumerable

    顺序查找

    顺序查找,无序的数组

    /// <summary>
    /// 顺序查找
    /// </summary>
    /// <param name="arr"></param>
    /// <param name="sValue"></param>
    /// <returns></returns>
    public static int SeqSearch(int[] arr, int sValue)
    {
        for (int i = 0; i < arr.Length; i++)
        {
            if (arr[i] == sValue)
                return i;
        }
    
        return -1;
    }

    最大值

    /// <summary>
    /// 最大值
    /// </summary>
    /// <param name="arr"></param>
    /// <returns></returns>
    public static int Max(int[] arr)
    {
        int max = arr[0];
        for (int i = 1; i < arr.Length; i++)
        {
            if (arr[i] > max)
            {
                max = arr[i];
            }
        }
    
        return max;
    }

    最小值

    /// <summary>
    /// 最小值
    /// </summary>
    /// <param name="arr"></param>
    /// <returns></returns>
    public static int Min(int[] arr)
    {
        int min = arr[0];
        for (int i = 1; i < arr.Length; i++)
        {
            if (arr[i] < min)
            {
                min = arr[i];
            }
        }
    
        return min;
    }

    自组织查找

    /// <summary>
    /// 自组织查找
    /// </summary>
    /// <param name="arr"></param>
    /// <param name="value"></param>
    /// <returns></returns>
    public static int CustomSeqSearch(int[] arr, int sValue)
    {
        for (int i = 0; i < arr.Length; i++)
        {
            if (arr[i] == sValue && i > arr.Length * 0.2)
            {
                Swap(arr, i, i - 1);
                return i - 1;
            }
            else
            {
                if (arr[i] == sValue)
                {
                    return i;
                }
            }
        }
    
        return -1;
    }
    二叉树查找
    /// <summary>
    /// 二叉查找
    /// </summary>
    /// <param name="arr"></param>
    /// <param name="sValue"></param>
    /// <returns></returns>
    public static int BinarySearch(int[] arr, int sValue)
    {
        int upperBound = arr.Length - 1, lowerBound = 0, mid = 0;
        while (lowerBound <= upperBound)
        {
            mid = (lowerBound + upperBound) / 2;
            if (arr[mid] == sValue)
            {
                return mid;
            }
            else
            {
                if (arr[mid] > sValue)
                {
                    upperBound = mid - 1;
                }
                else
                {
                    lowerBound = mid + 1;
                }
            }
        }
    
        return -1;
    }
     
    递归二叉查找
    /// <summary>
    /// 递归二叉查找
    /// </summary>
    /// <param name="arr"></param>
    /// <param name="value"></param>
    /// <param name="lower"></param>
    /// <param name="upper"></param>
    /// <returns></returns>
    public static int RBinarySearch(int[] arr, int value, int lower, int upper)
    {
        if (lower > upper)
        {
            return -1;
        }
        else
        {
            int mid = (lower + upper) / 2;
            if (value < arr[mid])
            {
                return RBinarySearch(arr, value, lower, mid - 1);
            }
            else if (value == arr[mid])
            {
                return mid;
            }
            else
                return RBinarySearch(arr, value, mid + 1, upper);
        }
    
    }
     
     
    总结:二叉树查找算法数据越大效果越好,顺序查找算法相反

    本文来自博客园,作者:技术宅的化身,转载请注明原文链接:https://www.cnblogs.com/Zyj12/p/14782329.html

  • 相关阅读:
    VS2015 C#取消最大化按钮,设置鼠标不可调整窗体大小
    C++调用C#编写的DLL【转】
    C#封装成DLL,并在C#中调用
    ubuntu永久修改主机名
    Anaconda3的安装和汉化
    windows下面安装Python和pip教程
    pip install bs4安装失败
    Sublime text 3中文汉化教程
    Vmware安装ubuntu详细教程
    Sublime text3修改tab键为缩进为四个空格
  • 原文地址:https://www.cnblogs.com/Zyj12/p/14782329.html
Copyright © 2011-2022 走看看