算法导论(第三版)第二章2.3-7
题干:
描述一个运行时间为θ(nlgn)的算法 给定n个整数的集合S和另一个整数X,该算法能确定S中是否存在两个其和刚好为x的元素.
// 设置两种下标
// 第一个下标的取值 从数组的第一个 到数组的倒数第二个 作为外层循环
// 第二个小标 根据二分法取值 从比第1个下标大1位的位置 到数组最后一个位置 作为内层循环
内层循环中:
假如所有元素除去第一个元素取值过的元素 剩余元素个数记为search_length;
取search_length中间数;
如果中间的元素与第一个下标所表示的元素相等 直接返回结果存在;结束所有循环;
如果中间的元素与第一个下标所表示的元素不相等,就根据偏大或偏小,往左/右移动一半的search_length;
search_length每次被用于移动后减半;
如此一直循环搜索到剩余元素仅1个,移位后依然不能使元素和为x时,就结束内层循环,进一步外层下标继续开始新一轮内层循环;
function sortAction($param)
{
$x = fetch($param, 0, 12);
$S = [0, 0, 0, 0, 0, 6, 7, 8, 9, 10];
$length = count($S);
$result = '';
// $i从数组的序号0到数组的倒数第二个序号 即数组元素个数-2
for ($i = 0; $i < ($length - 1); $i++) {
// $j的取值 剩余未排序数组的第search_length个
// search_lenth 剩余未被i取值的元素个数 每次计算后等于自身除以二 向上取整
$search_length = ceil(($length - ($i + 1)) / 2);
$j = $i + $search_length;
while (true) {
if ($j <= $
算法导论(第三版)第二章2.3-7 描述一个运行时间为θ(nlgn)的算法......
最新推荐文章于 2022-12-29 09:40:34 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)