用PHP实现求有序数组中最小值绝对数的算法分析

本文介绍了用PHP查找有序数组中绝对值最小数的一种算法,供大家参考:

问题:

一个有序数组可能有负值,或者可能不是,现在需要找到绝对值的最小值。

方法1:

遍历数组,查找绝对值的最小值,时间复杂度O(n),n作为元素的个数。

方法2:

二分查找,因为数组是有序的,你可以用两个点查找,时间复杂度为O(logN)。

分析步骤:

1。如果第一个数字是正数,它显示整个数组没有负数,直接返回第一个数字。

2。如果最后一个数字为负数,则显示整个数组没有正数,直接返回到最后一个数字。

3要素。数组是正的和负的,这意味着具有最小绝对值的元素必须在正负数的交界处,需要两个点才能找到该字段。

1。如果一个{中}<0,因为数组是上升的,最小的数量将不会出现在一个{中}在左边显示的绝对值,并确定正、负一{ 1 }中+元素,如果为负,那么你需要找到这个区间的右侧,如果一个{中叶1 }不是消极的,所以这两个是阳性和阴性结阵数,绝对值较小的回报两个数。

II。如果一个{中} > 0,因为数组是上升的,最小的数量将不会出现在一个{中}右边显示的绝对值,并确定正、负一{中叶1 }元素,如果为负,那么两是正、负结阵列的数量,小返回两个数的绝对值,如果一个{中叶1 }不是消极的,所以在中在搜索区间左。

三.如果{ ==0,那么{ }肯定是最小的元素。


功能selectabsminnum(数组arr)
{
$起始=0;
$ len =计数($ ARR)- 1;
如果($ ARR { 0 } > 0){ / /阵列
返回的数组{ 0 };
}
如果($ ARR { $ Len } < 0){ / /阵列
返回的ARR { $ Len };
}
当($ $开始)
美元=地板(($开始+ $莱恩) 2);
如果($ ARR { $中} > 0){
如果($ ARR { $中1 } > 0){
$ = 1美元;
{人}
返回min(ARR {中}美元美元美元美元,ARR {中1 });
}
} elseif($ ARR { $中} < 0){
如果($ ARR { $中+ 1 } < 0){
$开始= $ + 1;
{人}
返回min(ARR {中}美元美元美元美元,ARR { mid + 1 });
}
{人}
返回的ARR { $中};
}
}
}
sortarr美元= { 5,4,4,4, 5, 7,9 };
回声selectabsminnum($ sortarr),php_eol;




运行结果:4

关于PHP相关内容的更多读者感兴趣的读者可以看到特别站:PHP数据结构和算法教程

希望本文能对PHP程序设计有所帮助。