1. 程式人生 > 其它 >Java基礎-try-catch-finally處理

Java基礎-try-catch-finally處理

目錄

演算法之二分法

二分法使用有前提: 資料集必須有先後順序(升序 降序)

l1 =[13,21,35,46,52,67,76,87,99,123,213,321,432,564,612]
# 查詢一個數 123

"""
二分法原理
    獲取資料集中間的元素 比對大小
    如果中間的元素大於目標資料  那麼保留資料集的左邊一半
    如果中間的元素小於目標資料  那麼保留資料集的右邊一半
    然後針對剩下的資料集再二分
    如果中間的元素大於目標資料  那麼保留資料集的左邊一半
    如果中間的元素小於目標資料  那麼保留資料集的右邊一半
    ...
"""

def get_target(l1, target_num):
    # 最後需要考慮找不到的情況 l1不可能無限制二分
    if len(l1) == 0:
        print('不好意思 真的沒有 找不到')
        return
    # 1.獲取中間元素的索引值(只能是整數)
    middle_index = len(l1) // 2
    # 2.判斷中間索引對應的資料與目標資料的大小
    if target_num > l1[middle_index]:
        # 3.保留資料集右側
        l1_left = l1[middle_index + 1:]
        # 3.1.對右側繼續二分 重複執行相同程式碼 並且複雜度降低
        print(l1_left)
        get_target(l1_left, target_num)
    elif target_num < l1[middle_index]:
        # 4.保留資料集左側
        l1_right = l1[:middle_index]
        print(l1_right)
        # 4.1.對右側繼續二分 重複執行相同程式碼 並且複雜度降低
        get_target(l1_right, target_num)
    else:
        print('找到了', target_num)


get_target(l1, 13)

"""
二分法的缺陷
    1.如果要找的元素就在資料集的開頭 二分更加複雜(分更多次)
    2.資料集必須有順序
目前沒有最完美的演算法 都有相應的限制條件
"""