推荐给好友 上一篇 | 下一篇

php不用内置函数对数组排序的两个算法

a3Y/rC-?X#iJw R一朋友找工作遇到的试题,备注一下。BSD爱好者乐园Tcx'K.P D2c

.n'dYJ&g7S!CdH极有可能今后我也会遇到的。BSD爱好者乐园+o\G;}{)hf

2u!r2C6i3y1X问题:php不用内置函数数组排序,可能是降序或者升序BSD爱好者乐园*{4Ou6_,IYyh

+U|9?F;tN第一种方法:传说中的冒泡法

'@V8`t7h

c%j0~:|d5]n-`function arraysort($data, $order = 'asc') {
&u.b/wC F4O;P/x q-\ //asc升序    desc降序BSD爱好者乐园5H-PevD1n
 $temp = array ();
OeD0T HUiym9g5Z $count = count ( $data );BSD爱好者乐园-XE"n%u? r)K:c
 if ($count <= 0)
2UJ/o&j%^\'|Y  return false; //传入的数据不正确BSD爱好者乐园fb%p%tI L1W
 BSD爱好者乐园,lm Es"TGCj

BSD爱好者乐园)]9\I/X^1k&v v{~

 if ($order == 'asc') {
x7[EY]4SNz4r)\  for($i = 0; $i < $count; $i ++) {
-bK8z~)?/GJ#s6R   for($j = $count - 1; $j > $i; $j --) {BSD爱好者乐园2eMl#@!GVs
    if ($data [$j] < $data [$j - 1]) {BSD爱好者乐园(A#` l0e |9Vlw
     //交换两个数据的位置
t;U:w'{)zI     $temp = $data [$j];
/a4g)U9g {'j'O     $data [$j] = $data [$j - 1];
Cd8ey'R;Ss _     $data [$j - 1] = $temp;
Xn*R^Rm q    }
%AU]9I3QX]   }BSD爱好者乐园&Q;h#@7t;HGUA
  }BSD爱好者乐园|f?5QLS
 } else {
X[[@0Byr.O  for($i = 0; $i < $count; $i ++) {BSD爱好者乐园]Z }8~&}{_ s
   for($j = $count - 1; $j > $i; $j --) {
Z8q(LQ*[Y r8U    if ($data [$j] > $data [$j - 1]) {
x$Yw N*A`J     $temp = $data [$j];
!B.vm4YG6g     $data [$j] = $data [$j - 1];
%g\p X3u     $data [$j - 1] = $temp;
c PcFV I$E:tQ8[    }BSD爱好者乐园m7b7E*^G$[
   }
| X!l.o~ D*G_9j j)L$O  }
-GhtE%t }
\j S*B S 
a:Kx6w#f$^:bb*y'M return $data;
*M!b }p1lA#rI}

5}ciE~%U qBSD爱好者乐园)[d&IzN:n.F.| `l%k

$data = array (7, 5, 3, 8, 9, 1, 5, 3, 1, 24, 3, 87, 0, 33, 1, 12, 34, 54, 66, 32 );BSD爱好者乐园 K+I)_8NGGP
var_dump ( arraysort ( $data ) ); //升序
m)FTfO$a7zecho ('<br>');BSD爱好者乐园+e+hUH'n?W9v;J7F
var_dump ( arraysort ( $data ,'desc') );//降序BSD爱好者乐园 M E6H7\M#q2FE!L

M [ u]{&`,t#b BSD爱好者乐园W6rPD]\])F

BSD爱好者乐园]5_*K1}7o$d R

第二种方法:不知道取个什么名字好,就叫插入法吧!囧BSD爱好者乐园/Em9{ ~'u1L1f S

BSD爱好者乐园\QvK Q ^-b4Fyzf

function arraysort3($data, $order = 'asc') {BSD爱好者乐园#Kp-|[O3^ B p P$S,V
 //目前只做升序排列
!D'coh5jh#K Iq:Q C x+p $count = count ( $data );BSD爱好者乐园azv1v dvG4n#P9T
 for($i = 1; $i < $count; $i ++) {
!F"vMOUEC)y  $temp = $data [$i];
D KRg0r2y  $j = $i - 1;
Gr(HP$i@ moK  while ( $data [$j] > $temp ) {BSD爱好者乐园4U { g2o"F+HY
   $data [$j + 1] = $data [$j];BSD爱好者乐园|7{X-m6z X%|
   $data [$j] = $temp;
["\go,K Y   $j --;//为什么要递减:从高位逐位判断
NEHE8}L!c'EP+^o6h  }BSD爱好者乐园};b9|5h!g tn
 }
!isOA5@JPZ return $data;
d*o3G6@3YW}BSD爱好者乐园:x#i `w2o0A{2qf h4^

%O/i#{ W w\P$data = array (7, 5, 3, 8, 9, 1, 5, 3, 1, 24, 3, 87, 0, 33, 1, 12, 34, 54, 66, 32 );
3_:aI9d1k[;Cs!R+C_var_dump ( arraysort3 ( $data ) ); //升序

d5h k1A(tx rUR
[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: php PHP 排序 内置函数
 

评分:0

我来说两句

seccode