270 likes | 406 Views
SEARCHING. SEARCH. 1. นำดรรชนีที่กำหนดไว้ในคำสั่ง OCCURS มาเปรียบเทียบกับจำนวนของข้อมูลในตาราง ถ้าดรรชนีมีค่ามากกว่า จะทำให้มีการไปทำงานที่คำสั่งที่อยู่ในส่วนของ AT END และจากนั้นจะไปทำงานที่คำสั่งที่อยู่ถัดจาก คำสั่ง SEARCH
E N D
SEARCH 1. นำดรรชนีที่กำหนดไว้ในคำสั่ง OCCURS มาเปรียบเทียบกับจำนวนของข้อมูลในตาราง ถ้าดรรชนีมีค่ามากกว่า จะทำให้มีการไปทำงานที่คำสั่งที่อยู่ในส่วนของ AT END และจากนั้นจะไปทำงานที่คำสั่งที่อยู่ถัดจาก คำสั่ง SEARCH 2. แต่ถ้าดรรชนีมีค่าไม่เกินขนาดของตาราง จะมีการไปทำงานที่ส่วนของคำสั่ง WHEN เพื่อเปรียบเทียบเงื่อนไข ถ้าเงื่อนไขเป็นจริง จะไปที่คำสั่งที่อยู่ถัดจากเงื่อนไขนั้น แล้วจะทำให้จบการทำงานของคำสั่ง SEARCH นั่นคือจะไปทำงานที่คำสั่งถัดจาก SEARCH 3. แต่ถ้าเงื่อนไขไม่เป็นจริง จะทำให้มีการเพิ่มค่าของดรรชนีขึ้นอีกหนึ่ง แล้วจะย้อนกลับไปทำงานดังเช่นข้อ 2
Load-data SALES-TABLE
M 10 SALES-TABLE
M 20 SALES-TABLE
LetIndex 1-26 11111111112222222 12345678901234567890123456 ABCDEFGHIJKLMNOPQRSTUVWXYZ Letter(1) , Letter(2), … , Letter(26) LetterValues
NEXT SENTENCE IF A = B NEXT SENTENCEELSE MOVE C to DEND-IFDISPLAY "This is NOT the NEXT SENTENCE".DISPLAY "This IS the NEXT SENTENCE".
Lindex 1234567890123 ABCDEFGHIJKLM NOPQRSTUVWXYZ 1 2 Rindex
int binary_search(int a[], int key, int left, int right) { if (left > right) // แสดงว่าแถวลำดับไม่มีสมาชิกเหลืออยู่แล้ว และไม่มี key ที่ต้องการ return -1; //แสดงว่าไม่พบค่า key else //ถ้ายังมีสมาชิกอยู่ก็ทำการค้นหาต่อไป { int mid = (left+right)/2; //mid ดัชนีตรงกลางของแถวลำดับย่อยหรือหลัก if (a[mid]>key) // แสดงว่า key ต้องอยู่ระหว่าง a[left] กับ a[mid-1] return binary_search(a,key,left,mid-1); //ดังนั้นจึงไปค้นหาต่อในแถวลำดับย่อยระหว่าง left และ mid-1 if(a[mid]<key) return binary_search(a,key,mid+1,right); if(a[mid]==key) //พบ return mid; //คืนค่าตำแหน่งของ key ในแถวลำดับ a กลับไป } }