เมื่อจำเป็นต้องดำเนินการค้นหาแบบไบนารีโดยไม่ใช้พจนานุกรม สามารถกำหนดวิธีการที่จะตรวจสอบดัชนีแรกและดัชนีสุดท้ายของรายการ และรับค่าตรงกลางของรายการ
แล้วนำไปเปรียบเทียบกับค่าที่ต้องตรวจสอบ หากพบ ค่าจะถูกส่งคืน มิฉะนั้น -1 จะถูกส่งคืน
สิ่งสำคัญคือต้องจำไว้ว่าการค้นหาแบบไบนารีใช้งานได้กับองค์ประกอบที่เรียงลำดับเท่านั้น ไม่ว่าจะเรียงลำดับจากน้อยไปมากหรือมากไปหาน้อย
สามารถใช้รายการเพื่อเก็บค่าที่แตกต่างกัน (เช่น ข้อมูลของประเภทข้อมูลใดๆ เช่น จำนวนเต็ม จุดลอยตัว สตริง และอื่นๆ)
ด้านล่างนี้เป็นการสาธิตสำหรับสิ่งเดียวกัน -
ตัวอย่าง
def binary_search(my_list, elem):
low = 0
high = len(my_list) - 1
mid = 0
while low <= high:
mid = (high + low) // 2
if my_list[mid] < elem:
low = mid + 1
elif my_list[mid] > elem:
high = mid - 1
else:
return mid
return -1
my_list = [ 1, 9, 11, 21, 34, 54, 67, 90 ]
elem_to_search = 1
print("The list is")
print(my_list)
my_result = binary_search(my_list, elem_to_search)
if my_result != -1:
print("Element found at index ", str(my_result))
else:
print("Element not found!") ผลลัพธ์
The list is [1, 9, 11, 21, 34, 54, 67, 90] Element found at index 0
คำอธิบาย
- มีการกำหนดเมธอดที่ชื่อ 'binary_search' ซึ่งรับรายการและองค์ประกอบที่จะค้นหาเป็นพารามิเตอร์
- ตัวแปรระดับต่ำถูกกำหนดเป็น 0 และตัวแปรระดับกลางถูกกำหนดเป็น 0
- ตัวแปรสูงถูกกำหนดความยาวของรายการ-1
- ทำการหารระดับบิตเพื่อรับค่าสำหรับตัวแปร 'กลาง' เฉพาะในกรณีที่ค่า 'ต่ำ' น้อยกว่าหรือเท่ากับ 'สูง'
- ขั้นแรกให้ค้นหาองค์ประกอบจากดัชนีระดับต่ำถึงระดับกลาง หากค่าน้อยกว่าค่าที่ปรากฏที่ดัชนีระดับกลาง
- มิฉะนั้น องค์ประกอบจะถูกค้นหาจากดัชนีกลางถึงสูง หากค่ามากกว่ากลางและน้อยกว่าสูง
- ตอนนี้ รายการถูกกำหนดแล้ว
- เมธอดนี้เรียกโดยส่งรายการด้านบนเป็นพารามิเตอร์
- ข้อมูลการดำเนินการนี้ถูกเก็บไว้ในตัวแปร
- ตัวแปรนี้คือเอาต์พุตที่แสดงบนคอนโซล