现在有一个已排序的字典,请改写二分法检索算法,使之当排序码key 在字典中重复出现时算法能找出第一个key 出现的元素下标(用*position 来保存)
保持算法时间代价为 O(log n)
【答】 思路 一般的二分法检索算法只要找出关键码key 在字典中的一个下标
在比较的过程中,一旦发现相等,记录下当前下标mid 就符合要求
程序如下: 数据结构 字典采用 6
4 节中的顺序表示法
typedef int KeyType; typedef int DataType; 二分法检索算法 int binarySearch(SeqDictionary * pdic, KeyType key, int * position) { int low, mid, high; low = 0; high = pdic->n - 1; while (low element[mid]
key = = key) { *position = mid; return TRUE; } else if (pdic->element[mid]
key > key) high = mid - 1; else low = mid + 1; } *position = low; return FALSE; } 改写后的算法想要找出关键码key 在字典中第一次出现的下标
在比较中,如果遇到相等(key 与 pdic->element[mid]
key 相等),则需要分情形讨论
(1)如果当前下标mid 等于 0,或者 key 与 pdic->element[mid-1]
key 不等,那么 mid一定是 key 第一次出现的下标,返回 mid 即可
(2)如果情形(1)不成立,那么 mid 一定大于等于 key 第一次出现的下标,需要在low和 mid-1 之间继续进行搜索,找出key