Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรม Python Binary Search แบบไม่ใช้ Recursion


เมื่อต้องการทำ Binary Search โดยไม่ใช้ Recursion สามารถกำหนดเมธอดที่ตรวจสอบดัชนีแรกและสุดท้ายของลิสต์ และหาค่ากลางของลิสต์

เปรียบเทียบกับค่าที่ต้องการตรวจสอบ หากพบ ให้คืนค่า มิฉะนั้นคืนค่า -1

สำคัญ: Binary Search ทำงานกับข้อมูลที่เรียงลำดับแล้วเท่านั้น ไม่ว่าจะเป็น昇序 หรือ 降序

ลิสต์สามารถเก็บค่าที่หลากหลายได้

ตัวอย่าง

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' รับลิสต์และองค์ประกอบที่ต้องการค้นหาเป็นพารามิเตอร์
  • กำหนดตัวแปร low = 0 และ mid = 0
  • ตัวแปร high กำหนดเป็นความยาวลิสต์ - 1
  • ทำ floor division เพื่อหาค่า 'mid' กรณี 'low' น้อยกว่าหรือเท่ากับ 'high'
  • ค้นหาองค์ประกอบจาก low ถึง mid หากค่าน้อยกว่าค่าที่ mid
  • มิฉะนั้น ค้นหาจาก mid ถึง high หากค่ามากกว่า mid และน้อยกว่า high
  • กำหนดลิสต์
  • เรียกเมธอดโดยส่งลิสต์ข้างต้นเป็นพารามิเตอร์
  • ข้อมูลจากการดำเนินการนี้ถูกเก็บในตัวแปร
  • ตัวแปรนี้คือเอาต์พุทที่แสดงบนคอนโซล