查找算法 C#

来源:互联网 发布:windows安装苹方字体 编辑:程序博客网 时间:2024/05/20 19:12

顺序查找:哈哈哈

static int[] Arr = new int[11] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 99 };for(int i=0;i<Arr.lenght;i++){if(Arr[i]==Key){return i;}}


折半查找法:又称二分查找,前提是线性表中记录的关键码必须是连续的。中心思想不断取中间数做比较,时间复杂度是0(logN)。优于顺序查找(0(n))

  static int[] Arr = new int[11] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 99 };        static int binarySearch(int[] arr, int key, ref int index)        {            int low = 0, high = arr.Length - 1, mid = 0;            while (low <= high)            {                index += 1;//记录经过几次查找到结果                mid = (low + high) / 2;                if (key < arr[mid])                {                    high = mid;                }                else if (key > arr[mid])                {                    low = mid;                }                else                {                    return mid;                }            }            return 0;        }
差值查找:改良折半查找中的mid公式, 好处是在关键码均匀的情况下,时间复杂度要优于折半查找,缺点就是关键码非常不均匀的话时间复杂度和顺序查找是一样的,哈哈哈哈
 static int binarySearch2(int[] arr, int key, ref int index)        {            int low = 0, high = arr.Length - 1, mid = 0;            while (low <= high)            {                //mid = (low + high) / 2;                int fenzi = (key - arr[low]);                int fenmu = (arr[high] - arr[low]);                mid = low + (int)Math.Ceiling((fenzi * 1.0f / fenmu) * (high - low));                index += 1;                if (key < arr[mid])                {                    high = mid;                }                else if (key > arr[mid])                {                    low = mid;                }                else                {                    return mid;                }            }            return 0;        }    }



原创粉丝点击