Posted in PHP onFebruary 08, 2010
一朋友找工作遇到的试题,备注一下。
极有可能今后我也会遇到的。
问题:php不用内置函数对数组排序,可能是降序或者升序
第一种方法:传说中的冒泡法
function arraysort($data, $order = 'asc') { //asc升序 desc降序 $temp = array (); $count = count ( $data ); if ($count <= 0) return false; //传入的数据不正确 if ($order == 'asc') { for($i = 0; $i < $count; $i ++) { for($j = $count - 1; $j > $i; $j --) { if ($data [$j] < $data [$j - 1]) { //交换两个数据的位置 $temp = $data [$j]; $data [$j] = $data [$j - 1]; $data [$j - 1] = $temp; } } } } else { for($i = 0; $i < $count; $i ++) { for($j = $count - 1; $j > $i; $j --) { if ($data [$j] > $data [$j - 1]) { $temp = $data [$j]; $data [$j] = $data [$j - 1]; $data [$j - 1] = $temp; } } } } return $data; } $data = array (7, 5, 3, 8, 9, 1, 5, 3, 1, 24, 3, 87, 0, 33, 1, 12, 34, 54, 66, 32 ); var_dump ( arraysort ( $data ) ); //升序 echo ('<br>'); var_dump ( arraysort ( $data ,'desc') );//降序
第二种方法:不知道取个什么名字好,就叫插入法吧!?
function arraysort3($data, $order = 'asc') { //目前只做升序排列 $count = count ( $data ); for($i = 1; $i < $count; $i ++) { $temp = $data [$i]; $j = $i - 1; while ( $data [$j] > $temp ) { $data [$j + 1] = $data [$j]; $data [$j] = $temp; $j --;//为什么要递减:从高位逐位判断 } } return $data; } $data = array (7, 5, 3, 8, 9, 1, 5, 3, 1, 24, 3, 87, 0, 33, 1, 12, 34, 54, 66, 32 ); var_dump ( arraysort3 ( $data ) ); //升序
php不用内置函数对数组排序的两个算法代码
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@