C# 二分法的解讀


注:一定是有序的數組,才可以使用這種算法,如果數組沒有排序則先進行排序后再調用此方法。

1、二分法是做什么的呢?

當然是查找數組中的數據了,開個玩笑,哈哈哈。

2、為啥要用這種方式呢?

二分顧名思義,就是將一組數據對半分開(比如左右兩部分,下面用左右數組表示),從中間位置開始查找,

如果中間這個值正是咱們要找的值則直接返回這個值(或者索引),如果沒有找到,那么去判斷中間的這個值和咱們要找的值哪個大,

如果中間值比咱們要找的值大,則將之前分開的數組的左面的數組再進行對半分開,遞歸直到找到咱們要的那個值才會結束,反之亦然,

但是如果就是沒有咱們找的那么豈不是死循環了嘛,

所以要加判斷,如果遞歸到開始索引大於結束索引,也就是查到最后了還是沒有找到匹配的值,則退出。

這種搜索算法每一次比較都使搜索范圍縮小一半,這樣對於大數據量的數組,極大的提升了查找效率。

 

        private void button1_Click(object sender, EventArgs e)
        {
            int[] arry = { 8, 15, 19, 23, 26, 31, 40, 65, 91 };
            //測試  要找的數字是15
            int key = 15;
            //查找數並返回 若有,返回該數,沒有則返回-1
            int rr = BinarySearch(arry, 0, arry.Length - 1, key); 
        }

        /// <summary>
        /// 二分法查找指定值
        /// </summary>
        /// <param name="arr">目標數組</param>
        /// <param name="start">開始索引</param>
        /// <param name="end">結束索引</param>
        /// <param name="key">要查找的關鍵字</param>
        /// <returns></returns>
        public static int BinarySearch(int[] arr, int start, int end, int key)
        {
            int mid = (start + end) / 2;
            if (start > end)
                return -1;//查找不到返回-1
            else
            {
                Console.WriteLine(arr[mid]);//監測查找了哪些數字
                if (arr[mid] == key)
                    return mid;//若查找到,返回該數
                else if (arr[mid] > key)
                    return BinarySearch(arr, start, mid - 1, key);
                else return BinarySearch(arr, mid + 1, end, key);
            }
        }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM