查找算法 C#

顺序查找:哈哈哈

static int[] Arr = new int[11] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 99 };
for(int i=0;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;
        }
    }



你可能感兴趣的:(脚本)