Page 39 - โครงสร้างข้อมูลและขั้นตอนวิธี
P. 39

ขั้นต​ อนว​ ิธี​การ​ค้นหาข​ ้อมูล 15-29

     ข้อมูลท​ ี่​ส่ง​กลับ
          ถ้าห​ าค​ ่าข​ อบล​ ่างไ​ด้ ค่าท่ี​ส่งก​ ลับจ​ ะ​เป็นต​ �ำแหน่งข​ อง​ข้อมูล​ใน​อาร์เรย์
          ถ้าไ​ม่​สามารถ​หาข​ อบล​ ่างไ​ด้ ค่าที่ส​ ่ง​กลับจ​ ะ​เป็น​ต�ำแหน่ง​ที่​ไม่มี​จริง​ใน​อาร์เรย์​น่ันคือ -1

Function LowerBoundSearch (A, n, x)

 1 BEGIN
 2 	 left := 1
 3 	 right := n
 4 	 WHILE left < right DO
 5 		 pos := (left+right)/2
 6 		 IF x <= A[pos] THEN
 7 			 right := pos
 8 		 ELSE
 9 			 left := pos+1
10 	 END 	
11 	 IF x <= A[left] THEN
12 		 RETURN left
13 	 ELSE
14 		 RETURN -1
15 END

     การท​ �ำงาน
     บรรทัด​ที่ 2 	 เป็นการก​ �ำหนด​ค่าข​ อบซ​ ้ายส​ ุดใ​ห้​เป็น 1
     บรรทัดท​ ี่ 3 	 เป็นการก​ �ำหนดค​ ่าข​ อบ​ขวาส​ ุดใ​ห้เ​ป็น n
     	 ซ่ึง​ทั้งส​ องบ​ รรทัด​นี้เ​ป็นการ​ก�ำหนด​ช่วง​การ​พิจารณา​ครั้ง​แรกใ​ห้​เป็น​จ�ำนวนข​ ้อมูลท​ ั้งหมด
     บรรทัดท​ ี่ 4-10	 วน​ซ้ําตราบ​ใด​ที่ข​ อบซ​ ้าย​น้อยก​ ว่าข​ อบ​ขวา
     บรรทัด​ที่ 5 	 ก�ำหนด​ให้​ต�ำแหน่ง​ท่ีต​ รวจส​ อบ​ข้อมูลเ​ป็น​ต�ำแหน่งต​ รง​กลางร​ ะหว่าง​ขอบซ​ ้าย​และข​ วา
     บรรทัด​ที่ 6 	 เปรียบ​เทียบ​ข้อมูล​ที่ส​ ืบค้น​ว่าน​ ้อยก​ ว่า​หรือ​เท่ากับ​ค่าป​ ัจจุบัน​ของอ​ าร์เรย์​หรือไ​ม่
     บรรทัดท​ ี่ 7 	 ถ้า​น้อยก​ ว่า ให้​ปรับ​ขอบข​ วาล​ ง​มาเ​ป็น pos
     บรรทัด​ที่ 8 	 ถ้า​ไม่น​ ้อย​กว่า บรรทัด​ท่ี 9 ปรับข​ อบ​ซ้าย​ข้ึน​ไปเ​ป็น pos+1
     บรรทัด​ที่ 11 	 เปรียบเ​ทียบ​ค่า x ว่า​น้อย​กว่าห​ รือเ​ท่ากับค​ ่าท่ี​ขอบซ​ ้าย หรือ​ไม่
     บรรทัดท​ ี่ 12 	 ถ้าน​ ้อย​กว่า​หรือเ​ท่ากับ ให้ส​ ่ง​ค่า​กลับเ​ป็นต​ �ำแหน่ง​ของข​ อบ​ซ้าย
     บรรทัดท​ ี่ 14 	 ถ้าค​ ่า x มากกว่า​ค่าที่​ขอบ​ซ้าย ให้​ส่งค​ ่าก​ ลับ​เป็น​ต�ำแหน่ง -1
   34   35   36   37   38   39   40   41   42   43   44