???? READ命令使用順序查找數(shù)據(jù)表,這會(huì)降低處理速度胶哲。取而代之畔塔,使用binary search的附加命令,可以使用二分查找算法鸯屿,可以幫助加快內(nèi)表查找速度澈吨。
??? 在使用binary search之前必須首先將內(nèi)表排序,否則有可能找不到記錄寄摆,因?yàn)槎植檎曳磸?fù)將查找區(qū)間對(duì)半劃分谅辣,如果要查找的值小于查找區(qū)間的中間位置的數(shù)據(jù)項(xiàng)值,則查找區(qū)間將縮小到前半個(gè)區(qū)間婶恼,否則查找將局限于后半?yún)^(qū)間桑阶。
??? 不推薦使用:Read table int_fligh with key airln = ‘LF’.
??? 推薦使用:SORT int_fligh by airln. Read table int_fligh with key airln = ‘LF’ binary search.??? 二分查找
1、二分查找(Binary Search) 二分查找又稱折半查找勾邦,它是一種效率較高的查找方法蚣录。 二分查找要求:線性表是有序表,即表中結(jié)點(diǎn)按關(guān)鍵字有序眷篇,并且要用向量作為表的存儲(chǔ)結(jié)構(gòu)萎河。不妨設(shè)有序表是遞增有序的。
2铅歼、二分查找的基本思想 二分查找的基本思想是:(設(shè)R[low..high]是當(dāng)前的查找區(qū)間) (1)首先確定該區(qū)間的中點(diǎn)位置: [轉(zhuǎn)帖]SAPABAP性能優(yōu)化技巧—使用二分查找(BinarySearch)選項(xiàng) (2)然后將待查的K值與R[mid].key比較:若相等,則查找成功并返回此位置换可,否則須確定新的查找區(qū)間椎椰,繼續(xù)二分查找,具體方法如下: ①若R[mid].key>K沾鳄,則由表的有序性可知R[mid..n].keys均大于K慨飘,因此若表中存在關(guān)鍵字等于K的結(jié)點(diǎn),則該結(jié)點(diǎn)必定是在位置mid左邊的子表R[1..mid-1]中,故新的查找區(qū)間是左子表R[1..mid-1]瓤的。 ⌒萜②類似地,若R[mid].keyK) high=mid-1; //繼續(xù)在R[low..mid-1]中查找 else low=mid+1圈膏; //繼續(xù)在R[mid+1..high]中查找 } return 0塔猾; //當(dāng)low>high時(shí)表示查找區(qū)間為空,查找失敗 } //BinSeareh 二分查找算法亦很容易給出其遞歸程序【參見(jiàn)練習(xí)】 4稽坤、 二分查找算法的執(zhí)行過(guò)程 設(shè)算法的輸入實(shí)例中有序的關(guān)鍵字序列為 (05丈甸,13,19尿褪,21睦擂,37,56杖玲,64顿仇,75,80摆马,88臼闻,92) 要查找的關(guān)鍵字K分別是21和85。具體查找過(guò)程【參見(jiàn)動(dòng)畫演示】