[说明]
如图8-7所示的流程图用于从数组K中找出一切满足:K(I)+K(J)=M的元素对(K(I),K(J))(1≤I≤J≤N)。假定数组K中的N个不同的整数已按由小到大的顺序进行排列,M是给定的常数。
[流程图]
在如图8-7所示的流程图中,比较“K(I)+K(J)=M”最少执行次数约为______。
参考答案:N→J (2) I<J
(3)I-1→I (4) J-1→J
(5) |N/2|
解析:依题意,理顺图8-7所示的从数组K中查找相关元素对的算法基本思想是:设置了两个变量I和J,初始时分别指向数组K的第一个元素和最后一个元素。若这两个元素之和等于M,则输出结果,并且使这两个指针都向中间移动一个位置;若这两个元素之和小于M,则将指针,向中间移动(因为数组K已按由小到大的顺序进行排列);若这两个元素之和大于M,则将指针J向中间移动;以此类推。当I≥J时,说明数组K中所有的元素都搜索完毕,则退出循环。
结合以上分析,(1) 空缺处应将数组K中最后一个元素的下标赋予J,即应填入N→J。
(2) 空缺处应判断循环体是否退出,其所填入的条件表达式是I<J。当I=J时,说明这两个指针指向同一元素,则应当退出循环。
(3) 空缺处在流程图中有两处,一处是当K(I)+K(J)=M时,另一处是当K(I)+K(J)<M时,在这两种情况下,都要将指针I向中间移动一个位置,即该空缺处应填入I+1→I。
同理,(4) 空缺处应填入将指针J向中间移动一个位置的表达式J-1→J。
在如图8-7所示的流程图中,比较“K(I)+K(J)=M”最少执行次数发生在第1元素与第N个元素之和等于M、第2元素与第N-1个元素之和等于M、第3元素与第N-2个元素之和等于M、……。若符合此类型的情况,则每次比较时,指针I和J都向中间移动,因此比较“K(I)+K(J)=M”最少执行次数约为N/2次(计算结果应向上取整数)。