Unity3d二分查找算法實現(xiàn)

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

using UnityEngine;

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

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

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

        //循環(huán)遍歷(起始點<=終止點)
        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("不存在該數(shù)值!");
        return false;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容