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

15-24 โครงสร้าง​ข้อมูล​และ​ขั้นต​ อนว​ ิธี

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

 Function BinarySearch (A, n, x)

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

       การท​ �ำงาน
       บรรทัด​ที่ 2 	 เป็นการ​ก�ำหนดค​ ่าข​ อบซ​ ้าย​สุด​ให้เ​ป็น 1
       บรรทัดท​ ี่ 3 	 เป็นการ​ก�ำหนดค​ ่าข​ อบข​ วา​สุด​ให้​เป็น n
       	 ซ่ึงท​ ั้งส​ อง​บรรทัดน​ ี้​เป็นการก​ �ำหนดช​ ่วง​การพ​ ิจารณาค​ รั้ง​แรกใ​ห้เ​ป็น​จ�ำนวนข​ ้อมูลท​ ั้งหมด
       บรรทัด​ที่ 4-13	 ก�ำหนดใ​ห้​ท�ำ​ซ้ําตราบใ​ด​ท่ีค​ ่า​ขอบ​ซ้าย​น้อย​กว่า​หรือเ​ท่ากับข​ อบ​ขวา
       บรรทัดท​ ี่ 6	 ก�ำหนด​ให้​ต�ำแหน่ง​ที่​ตรวจส​ อบข​ ้อมูล​เป็นต​ �ำแหน่ง​ตรง​กลางร​ ะหว่าง​ขอบซ​ ้าย​และข​ วา
       บรรทัด​ที่ 7	 เปรียบเ​ทียบข​ ้อมูล​ที่​สืบค้นว​ ่าเ​ท่ากับค​ ่าป​ ัจจุบัน​ของ​อาร์เรย์​หรือไ​ม่
       บรรทัดท​ ี่ 8	 ถ้าเ​ท่า​กัน ให้ส​ ่งค​ ่า​กลับเ​ป็นต​ �ำแหน่งท​ ่ีพ​ บ​คือ pos
       บรรทัดท​ ี่ 9	 เปรียบ​เทียบ​ข้อมูล​ที่​สืบค้น​ว่า​น้อย​กว่า​ค่าป​ ัจจุบัน​ของอ​ าร์เรย์ห​ รือไ​ม่
       บรรทัดท​ ี่ 10	ถ้า​น้อย​กว่า ให้​ปรับ​ขอบ​ขวา​ลง​มา​เป็น pos-1 นั่นคือ​ลด​ขนาด​ข้อมูล​ที่​ตรวจ​สอบ​มา​เหลือ​แค่

                   ครึ่ง​ซ้าย
       บรรทัด​ท่ี 12	ถ้า​บรรทัด​ที่ 7 และ บรรทัด​ท่ี 9 ไม่​เป็นจ​ ริง บรรทัดท​ ี่ 12 ปรับข​ อบซ​ ้ายข​ ึ้นไ​ปเ​ป็น pos+1 น่ัน

                   คือล​ ดข​ นาดข​ ้อมูล​ที่​ตรวจ​สอบ​มา​เหลือ​แค่​ครึ่ง​ขวา
       บรรทัด​ที่ 14	ถ้า​ท�ำ​ซ้ําตั้งแต่​บรรทัด​ท่ี 4 จนถึง 13 จน​ขอบ​ซ้าย​มากกว่า​ขอบ​ขวา​แล้ว​ไม่​พบ​ค่าท่ี​สืบค้น

                   ให้ส​ ่งค่าก​ ลับเ​ป็นต​ �ำแหน่ง -1
   29   30   31   32   33   34   35   36   37   38   39