美文网首页
003_基础查找算法

003_基础查找算法

作者: HMY轩园 | 来源:发表于2017-05-15 20:03 被阅读0次
static void Main(string[] args)
        {
   int[] numbers = new int[20];

           StreamReader numFile = File.OpenText(@"H:\工作学习unity\CSharpTest\ConsoleApplication1\demo\Test.txt");
            for (int i = 0; i < numbers.Length; i++)         
               numbers[i]=Convert.ToInt32( numFile.ReadLine());

            int searchNumber;
           Console.WriteLine("Enter a Number to search for:");
            searchNumber = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine( SeqSearch(numbers, searchNumber));
            Console.WriteLine(SeqSearchIndex(numbers, searchNumber));
            Console.WriteLine("最大值"+FindMax(numbers));

            Console.WriteLine("最小值" + FindMin(numbers));

            Console.WriteLine( binSearch(58));

            Console.WriteLine(RbinSearch(64, 0,9));
            Console.Read();
        }

/// <summary>
        /// 顺序查找
        /// </summary>
        /// <param name="arr"></param>
        /// <param name="sValue"></param>
        /// <returns></returns>
        static bool SeqSearch(int[] arr,int sValue) {
            for (int index = 0; index < arr.Length; index++)
            {
                if (arr[index]==sValue)
                {
                    return true;
                }
            }
            return false;
        }
        /// <summary>
        /// 顺序查找返回位置
        /// </summary>
        /// <param name="arr"></param>
        /// <param name="sValue"></param>
        /// <returns></returns>
        static int SeqSearchIndex(int[] arr, int sValue)
        {
            for (int index = 0; index < arr.Length; index++)
                if (arr[index] == sValue)            
                    return index; 
            return -1;
        }
        /// <summary>
        /// 查找最小值
        /// </summary>
        /// <param name="arr"></param>
        /// <returns></returns>
        static int FindMin(int[] arr) {
            int min= arr[0];
            for (int index = 1; index < arr.Length; index++) 
                if (min>arr[index])                                
                    min = arr[index];
          return  min;               
        }
        /// <summary>
        /// 查找最大值
        /// </summary>
        /// <param name="arr"></param>
        /// <returns></returns>
        static int FindMax(int[] arr)
        {
            int max = arr[0];
            for (int index = 1; index < arr.Length; index++)
                if (max < arr[index])
                    max = arr[index];
            return max;
        }


        public static Int32[] IntArr = new Int32[10] { 2, 23, 34, 56, 58, 64, 89, 90, 97, 99 };
        /// <summary>
        /// 自组织数据加快顺序查找速度
        /// </summary>
        /// <param name="aValue"></param>
        /// <returns></returns>
        static int SeqSearchCustom(int aValue) {
            for (int i = 0; i < IntArr.Length; i++)
            {
                if (IntArr[i]==aValue&&i>(IntArr.Length*0.2))
                {
                    swap(i,i-1);
                    return i - 1;
                }

                else
                {
                    if (IntArr[i] == aValue)
                    {
                        return i;
                    }
                }
            }

            return -1;
        }

        static void swap(int index1,int index2) {
            int temp = IntArr[index1];
            IntArr[index1] = IntArr[index2];
            IntArr[index2] = temp;
        }

        //二分查找(有顺序的)
        static int binSearch(int value) {

            int upperBound, lowerBound, mid;
            upperBound = IntArr.Length - 1;
            lowerBound = 0;

            while (lowerBound<= upperBound)
            {
                mid = (lowerBound+upperBound) / 2;
                if (IntArr[mid]==value)
                    return mid;              
                else
                {
                    if (value< IntArr[mid])
                        upperBound = mid - 1;
                    else
                        lowerBound = mid + 1;
                }
            }
            return -1;

        }
        /// <summary>
        /// 递归的二分查找
        /// </summary>
        /// <param name="value"></param>
        /// <param name="lower"></param>
        /// <param name="upper"></param>
        /// <returns></returns>
        public static int RbinSearch(int value,int lower,int upper) {

            if (lower>upper)
            {
                return -1;
            }
            else
            {
                int mid = (upper+lower) / 2;
                if (value<IntArr[mid])
                {
                    return RbinSearch(value, lower, mid - 1); 
                }
                else if (value ==IntArr[mid])
                {
                    return mid;
                }
                else return RbinSearch(value, mid + 1, upper);
            }
        }
    }
}

相关文章

  • 003_基础查找算法

  • 算法

    一.算法基础--算法的特性 二.算法基础--算法的复杂度 三.顺序查找和二分查找 顺序查找 二分查找(前提是有序的...

  • 基础查找算法分析

    在之前学习了一些排序算法,得出了基础排序算法的总结。之后学习了一些查找算法,今天来对于基础的一些查找算法进行总结。...

  • 排序算法

    算法与数据结构基础 查找算法: 二分查找法: 简介:二分查找法又被称为折半查找法,用于预排序的查找问题 过程: 如...

  • 『算法』『数据结构』 浅谈二分算法,理解程序员必懂必会的计算机常

    基本认识 二分算法,又名二分查找、折半查找,是一种查找算法,是最基础的,最简单易学且高效实用的算法之一。二分算法的...

  • 003_排序算法

  • 基础算法(查找 , 排序)

    算法分析 渐进符号 - (O , Ω , θ) 查找算法 二分查找 - O(logn) 排序算法 直接插入排序 -...

  • 6.1 查找算法_基础

    1. 查找基本概念 查找:只有两种情况,查找成功,查找失败 查找表:查找的数据集合称为查找表 静态查找表 / 动态...

  • 数据结构与算法-排序/二分查找

    算法中基础中的基础,排序/二分查找 排序 1.快排QuickSort 归并排序 堆排序 1. 二分查找

  • 6 查找复习目录

    6.1 查找算法_基础 顺序查找(1)排没排序查找没区别(2)遍历设置没找到的标志(3)ASL(成功,不成功) 折...

网友评论

      本文标题:003_基础查找算法

      本文链接:https://www.haomeiwen.com/subject/sjzhxxtx.html