二分法查找数组是否包含某一元素,兼容正反序,代码实现:
<span 1</span> <?<span php
</span><span 2</span>
<span 3</span> <span $searchValue</span> = (int)<span $_GET</span>['key'<span ];
</span><span 4</span>
<span 5</span> <span function</span> search(<span array</span> <span $array</span>, <span $value</span><span )
</span><span 6</span> <span {
</span><span 7</span> <span $max</span> = <span count</span>(<span $array</span>)-1<span ;
</span><span 8</span> <span $min</span> = 0<span ;
</span><span 9</span> <span $isAscSort</span> = <span $array</span>[<span $min</span>] < <span $array</span>[<span $max</span><span ];
</span><span 10</span>
<span 11</span> <span while</span> (<span TRUE</span><span ) {
</span><span 12</span> <span $sum</span> = <span $min</span>+<span $max</span><span ;
</span><span 13</span> <span $midKey</span> = (int)(<span $sum</span>%2 == 1 ? <span ceil</span>(<span $sum</span>/2) : <span $sum</span>/2<span );
</span><span 14</span>
<span 15</span> <span if</span> (<span $max</span> < <span $min</span><span ) {
</span><span 16</span> <span return</span> -1<span ;
</span><span 17</span> } <span else</span> <span if</span> (<span $value</span> == <span $array</span>[<span $midKey</span><span ]) {
</span><span 18</span> <span return</span> 1<span ;
</span><span 19</span> } <span else</span> <span if</span> (<span $value</span> > <span $array</span>[<span $midKey</span><span ]) {
</span><span 20</span> <span $isAscSort</span> ? <span $min</span> = <span $midKey</span>+1 : <span $max</span> = <span $midKey</span>-1<span ;
</span><span 21</span> } <span else</span> <span if</span> (<span $value</span> < <span $array</span>[<span $midKey</span><span ]) {
</span><span 22</span> <span $isAscSort</span> ? <span $max</span> = <span $midKey</span>-1 : <span $min</span> = <span $midKey</span>+1<span ;
</span><span 23</span> <span }
</span><span 24</span> <span }
</span><span 25</span> <span }
</span><span 26</span>
<span 27</span> <span $array</span> = <span array</span><span (
</span><span 28</span> '4', '5', '7', '8', '9', '10', '11', '12'
<span 29</span> <span );
</span><span 30</span> <span //</span><span 正序</span>
<span 31</span> <span echo</span> search(<span $array</span>, <span $searchValue</span><span );
</span><span 32</span>
<span 33</span> <span //</span><span 逆序</span>
<span 34</span> <span rsort</span>(<span $array</span><span );
</span><span 35</span> <span echo</span> search(<span $array</span>, <span $searchValue</span>);
这个没考虑非顺序键的数组,主要是方法,如果需要大家可以自己扩展下。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号