1. 程式人生 > >列表查詢及二分查詢 列表查詢以及二分查詢

列表查詢及二分查詢 列表查詢以及二分查詢

列表查詢以及二分查詢

一、列表查詢

1、列表查詢:從列表中查詢指定元素

  • 輸入:列表、待查詢元素
  • 輸出:元素下標或未查詢到元素

2、順序查詢:從列表第一個元素開始,順序進行搜尋,直到找到為止。返回找到的那個索引
3、二分查詢:從有序列表的候選區data[0:n]開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半。

   二分查詢:時間複雜度是O(logn)
      二分查詢的前提:列表是有序的

切片的複雜讀是O(n) #因為切的時候是賦值的

二分查詢示例

複製程式碼
def serach(li,val):
    low = 0  #開始索引
    high = len(li) - 1  #結束索引
    while low<=high:
        mid = (low+high)//2
        if li[mid] > val:   #如果中間值比傳進來的值大就從中間值的左邊找
            high = mid-1
        elif li[mid]<val:
            low = mid +1
        else:
            return mid
    
else: return -1 li = list(range(0,101,2)) print(serach(li,98)) # ==================遞迴版的二分查詢=========== def bin_serach_rec(li,val,low,high): if low<=high: mid = (low+high)//2 if li[mid] >val: return bin_serach_rec(li,val,low,mid-1,) elif li[mid]<val:
return bin_serach_rec(li,val,mid+1,high) else: return mid else: return li = list(range(0,101,2)) print(serach(li,98))
複製程式碼

二、列表排序

1、列表排序

將無序列表變為有序列表

2、應用場景

  • 各種榜單
  • 各種表格
  • 給二分查詢用
  • 給其他演算法用

輸入:無序列表

輸出:有序列表

 

   

一、列表查詢

1、列表查詢:從列表中查詢指定元素

  • 輸入:列表、待查詢元素
  • 輸出:元素下標或未查詢到元素

2、順序查詢:從列表第一個元素開始,順序進行搜尋,直到找到為止。返回找到的那個索引
3、二分查詢:從有序列表的候選區data[0:n]開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半。

   二分查詢:時間複雜度是O(logn)
      二分查詢的前提:列表是有序的

切片的複雜讀是O(n) #因為切的時候是賦值的

二分查詢示例

複製程式碼
def serach(li,val):
    low = 0  #開始索引
    high = len(li) - 1  #結束索引
    while low<=high:
        mid = (low+high)//2
        if li[mid] > val:   #如果中間值比傳進來的值大就從中間值的左邊找
            high = mid-1
        elif li[mid]<val:
            low = mid +1
        else:
            return mid
    else:
        return -1

li = list(range(0,101,2))
print(serach(li,98))



# ==================遞迴版的二分查詢===========
def bin_serach_rec(li,val,low,high):
    if low<=high:
        mid = (low+high)//2
        if li[mid] >val:
            return bin_serach_rec(li,val,low,mid-1,)
        elif li[mid]<val:
            return bin_serach_rec(li,val,mid+1,high)
        else:
            return mid
    else:
        return

li = list(range(0,101,2))
print(serach(li,98))
複製程式碼

二、列表排序

1、列表排序

將無序列表變為有序列表

2、應用場景

  • 各種榜單
  • 各種表格
  • 給二分查詢用
  • 給其他演算法用

輸入:無序列表

輸出:有序列表