<!--打赏 End-->

二分查找

        #region 查找
        public static bool SeqSearch(int[] arr, int value)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] == value)
                {
                    return true;
                }
            }
            return false;
        }

        public static int SeqSearch(int[] arr, int value)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] == value)
                {
                    return i;
                }
            }
            return -1;
        }

        static int FindMin(int[] arr)
        {
            int min = arr[0];
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] < min)
                {
                    min = arr[i];
                }
            }
            return min;
        }

        static int FindMax(int[] arr)
        {
            int max = arr[0];
            for (int i = 0; i < arr.Length - 1; i++)
            {
                if (arr[i] > max)
                {
                    max = arr[i];
                }
            }
            return max;
        }

        public static int SearchSearch(int[] arr, int value)
        {
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] == value)
                {
                    int j = i - 1;
                    swap(arr, ref i, ref j);
                    return i;
                }
            }
            return -1;
        }
        public static void swap(int[] arr, ref int i, ref int j)
        {
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }

        public static int SeqSearch(int[] arr, int value)
        {
            for (int i = 0; i < arr.Length - 1; i++)
            {
                if (arr[i] == value && i > arr.Length * 2)
                {
                    int j = i - 1;
                    swap(arr, ref i, ref j);
                    return i;
                }
                else if (arr[i] == value)
                {
                    return i;
                }
            }
            return -1;
        }

        public static int SeqSearch(int[] arr, int value)
        {
            for (int i = 0; i < arr.Length - 1; i++)
            {
                if (arr[i] == value)
                {
                    int j = i - 1;
                    swap(arr, ref i, ref j);
                    return i;
                }
            }
            return -1;
        }
        #endregion

        #region 二分查找
        public int BinarySearch(int[] arr, int value)
        {
            int low = 0, high = arr.Length - 1, mid;
            while (low <= high)
            {
                mid = (low + high) / 2;
                if (mid == value)
                {
                    return mid;
                }
                else
                {
                    if (value < arr[mid])
                    {
                        high = mid - 1;
                    }
                    else
                    {
                        low = mid + 1;
                    }
                }
            }
            return -1;
        }

        public int BinarySearch(int[] arr, int value, int low, int high)
        {
            if (low > high)
            {
                return -1;
            }
            else
            {
                int mid = (low + high) / 2;
                if (value<mid)
                {
                    return BinarySearch(arr,value,low,high-1);
                }
                else if (value==mid)
                {
                    return mid;
                }
                else
                {
                    return BinarySearch(arr,value,mid+1,high);
                }
            }
        }
        #endregion
View Code

 

posted @ 2017-11-15 06:54  mikefts  阅读(135)  评论(0编辑  收藏  举报