Unity3d二分查找算法實現

二分查找又稱折半查找,優點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查找方法適用于不經常變動而查找頻繁的有序列表。首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、后兩個子表,如果中間位置記錄的關鍵字大于查找關鍵字,則進一步查找前一子表,否則進一步查找后一子表。重復以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在為止,此時查找不成功。
開始我們的代碼

using UnityEngine;

/// <summary>
/// 二分查找算法(在有序數組中快速尋找一個指定數值)
/// </summary>
public class BinarySearchSort : MonoBehaviour
{
    //有序數組
    int[] array = new[] {5, 6, 7, 8, 9, 12, 45, 55};

    void Start()
    {
        //調用查找方法,輸出 bool值
        Debug.Log(BinarySearch(array, 45));
    }

    /// <summary>
    /// 二分查找方法
    /// </summary>
    /// <param name="array">數組</param>
    /// <param name="targetNum">目標數值</param>
    /// <returns>是否找到目標數值</returns>
    bool BinarySearch(int[] array, int targetNum)
    {
        //起始點
        int start = 0;
        //結束點
        int end = array.Length - 1;
        //中界點
        int mid;

        //循環遍歷(起始點<=終止點)
        while (start <= end)
        {
            //計算中界點
            mid = (start + end)/2;
            //第一種情況
            if (array[mid] > targetNum)
            {
                //終止點=中界點-1
                end = mid - 1;
            }
            //第二種情況
            else if (array[mid] < targetNum)
            {
                //起始點=中界點+1
                start = mid + 1;
            }
            //找到
            else
            {
                Debug.Log("所在下標:" + mid);
                return true;
            }
        }
        //未找到
        Debug.Log("不存在該數值!");
        return false;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容