將列表分成若干子列表(塊),這些塊是有序的,(每個塊的第乙個元素比前乙個塊的最後乙個元素大),但塊中的元素是無序的。首先確定待查值在哪個塊,然後在塊中順序查詢即可。
# -*- coding: utf-8 -*-
'''分塊查詢:塊是有序的(塊的第乙個元素比前乙個塊的最後乙個元素大),但元素可以是無序的;
1.首先看待查元素屬於哪個塊
2.找到屬於哪個塊之後 跳進去順序查詢
'''def
divblock
(ilist,indexlist)
: res=
for key in indexlist:
sublist=
[ele for ele in ilist if ele<=key[1]
and ele>=key[0]
]return res
defblocksearch
(input_list,index_list,key)
:for sublist,index in
zip(input_list,index_list)
:# 迴圈對應的塊和ind
if key<=index[1]
:# 若待查值《邊界值
res=
[i for i in
range
(len
(sublist)
)if key==sublist[i]
]# 順序查詢子list。
return res[0]
return-1
if __name__ ==
'__main__'
: ilist=[9
,17,13
,5,2
,26,7
,23,29
] key=
13# 分塊,可以分成三塊,給定三個有序下標:0-9,10-19,20-29
indexlist=[[
0,9]
,[10,
19],[
20,29]
]# 類似於哨兵的角色
res=divblock(ilist,indexlist)
# 分塊好的list
result=blocksearch(res,indexlist,key)
print
(result)
a. 主要是靈活運用zip函式。 Python基礎學習 第三彈
向內看自己,永遠看自己的進步!好!開始!五 函式 def定義函式,函式分為有無引數 有無返回值。函式先後順序執行,先定義函式在呼叫函式。函式的本質是乙個位址,函式的引數可以為另乙個函式,函式作為變數時不帶括號。還可以利用返回值作為引數。帶括號的函式的型別是函式的返回值型別。函式可以有多個返回值。re...
python資料型別(第三彈)
本文著重介紹python語言的兩種資料型別 列表和元組 列表相比於整型 浮點型等資料型別,列表是乙個復合資料型別,它更像乙個容器,可以容納多種不同型別的資料。如上圖 列表a中裝進去了字串 sdf 整數3,浮點數7.9,列表 1,2,3 即列表可以成為另乙個列表的元素 當乙個列表建立完成之後,可以對其...
查詢演算法 分塊查詢
分塊查詢也稱為索引順序表查詢。分塊查詢就是將順序表 主表 分成若干個子表,然後為每個子表建立乙個索引表,利用索引在其中乙個子表中查詢。兩部分 索引表 儲存順序表的每個子表的開始索引和最大值。順序表 主表所有資料存放的位置。子表內可以是無序的,但是子表之前面的子表中每個元素必須小於後面子表中的每個元素...