博客小子:记录我们对互联网和生活的探索! 注册 | 登陆

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

Tags: php, 数组, 排序

一朋友找工作遇到的试题,备注一下。

极有可能今后我也会遇到的。

问题: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 ) ); //升序

Tags: php, 数组, 排序

« 上一篇:Ubuntu server设置urlrewrite mod支持htaccess | 下一篇:学习:MFC小把戏,生成拼音域名列表 »

只显示10条记录相关文章

Trackbacks

点击获得Trackback地址,Encode: UTF-8

发表评论

评论内容 (必填):