第9章程序设计的一些编程技巧 At MOV AL, AH ;查找到时,AH中为对应 的十六进制数 RET SEARCH ENDP SEQ CODE ENDS END START
第9章 程序设计的一些编程技巧 AT: MOV AL,AH ;查找到时,AH中为对应 的十六进制数 RET SEARCH ENDP SEQ_CODE ENDS END START
第9章程序设计的一些编程技巧 例9-5折半查找法 折半查找( Binary search)的查找过程是:对一个有序表,先 确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或 找不到该记录为止 如已知如下11个数据元素的有序表: (02,11,17,20,35,51,60,77,83,89,97) 现要查找关键字为20和85的数据元素。 假设指针L和H分别指示待查元素所在范围的下界和上界, 指针M指示区间的中间位置,即M=[(L+H/2。在此例中,L和H 的初值分别为1和11,即[1,1待查范围
第9章 程序设计的一些编程技巧 例9-5 折半查找法。 折半查找(Binary Search)的查找过程是:对一个有序表,先 确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或 找不到该记录为止。 如已知如下11个数据元素的有序表: (02,11,17,20,35,51,60,77,83,89,97) 现要查找关键字为20和85的数据元素。 假设指针L和H分别指示待查元素所在范围的下界和上界, 指针M指示区间的中间位置,即M = [(L+H)]/2。在此例中,L和H 的初值分别为1和11,即[1,11]为待查范围
第9章程序设计的一些编程技巧 查找给定值K=20的过程: 0211172035516077838997 ↑L ↑M ↑H 先令査找范围中间位置的数据元素的关键字BUF[M与给定值K 相比较,因为BUFM]>K,说明待查元素若存在,必在区间[L, M-]的范围内,则令指针H指向第M-1个元素,重新求得M [(1+5)/2]=3 0211172035516077838997 ↑L↑M↑H
第9章 程序设计的一些编程技巧 查找给定值K=20的过程: 02 11 17 20 35 51 60 77 83 89 97 ↑L ↑M ↑H 先令查找范围中间位置的数据元素的关键字BUF[M]与给定值K 相比较,因为BUF[M] > K,说明待查元素若存在,必在区间[L, M-1]的范围内,则令指针H指向第M-1个元素,重新求得M= [(1+5)/2]=3 02 11 17 20 35 51 60 77 83 89 97 ↑L ↑M ↑H
第9章程序设计的一些编程技巧 仍以BUF[M和K相比,因为BUFM<K,说明待查元素 若存在,必在[M+1,田范围内,则令指针L指向第M+1个元素, 求得M的新值为4,比较BUH[M和K,因为相等,则查找成功, 所查元素在表中序号等于指针M的值 0211172035516077838997 ↑L↑H ↑M
第9章 程序设计的一些编程技巧 仍以BUF[M]和K相比,因为BUF[M] < K,说明待查元素 若存在,必在[M+1,H]范围内,则令指针L指向第M+1个元素, 求得M的新值为4,比较BUF[M]和K,因为相等,则查找成功, 所查元素在表中序号等于指针M的值。 02 11 17 20 35 51 60 77 83 89 97 ↑L ↑H ↑M
第9章程序设计的一些编程技巧 查找K=85的过程 0211172035516077838997 个L ↑M1 ↑H BUFM<K,令L=M+1: 0211172035516077838997 ↑L个 ↑H BUFM<K,令L=M+1: 0211172035516077838997 ↑L↑H ↑M
第9章 程序设计的一些编程技巧 查找K=85的过程: 02 11 17 20 35 51 60 77 83 89 97 ↑L ↑M ↑H BUF[M] < K,令L = M + 1: 02 11 17 20 35 51 60 77 83 89 97 ↑L ↑M ↑H BUF[M] < K,令L = M + 1: 02 11 17 20 35 51 60 77 83 89 97 ↑L ↑H ↑M