+ -
当前位置:首页 → 问答吧 → PHP排序算法

PHP排序算法

时间:2008-06-28

来源:互联网

冒泡排序算法
复制PHP内容到剪贴板
PHP代码:

<?php
//冒泡排序算法
$arr = array(12,52,14,43,24,58,15,64,24,57,17,56,45);
$count = count($arr);
for($i = $count-1; $i>0; --$i)
{
 for($j = 0; $j < $i; ++$j)
 {
  if($arr[$j] > $arr[$j + 1])
  {
   $temp = $arr[$j];
   $arr[$j] = $arr[$j+1];
   $arr[$j+1] = $temp;
  }
 }
}
print_r($arr);
?>

插入排序:
复制PHP内容到剪贴板
PHP代码:

<?php
for($i=0; $i<1000; ++$i)
{
 $arr[] = mt_rand(1,1000);
}
$count = count($arr);
$start = microtime(true);
for ($i = 1; $i < $count ; ++$i)
{
 $temp = $arr[$i];
 $j = $i;
 while($j > 0 && $arr[$j-1] >= $temp)
 {
  $arr[$j] = $arr[$j-1];
  --$j;
 }
 $arr[$j] = $temp;
}
?>

快速排序:
复制PHP内容到剪贴板
PHP代码:

<?php
$start = microtime(true);
function initArr()
{
 for($i=0; $i<10; ++$i)
 {
  $arr[] = mt_rand(1,100);
 }
 return $arr;
}
function swap(&$arr, $leftptr, $rightptr)
{
 $temp = $arr[$leftptr];
 $arr[$leftptr] = $arr[$rightptr];
 $arr[$rightptr] = $temp;
}

function quickSort()
{
 $arr = initArr();
 $count = count($arr);
 recQuickSort($arr, 0, $count-1);
 
 print_r($arr);
}
function recQuickSort(&$arr, $left, $right)
{
 if($right - $left <=0)
 return;
 else{
  $pivot = $arr[$right];
  
  $partition = patitionIt($arr, $left, $right, $pivot);
  recQuickSort($arr, $left, $partition-1);
  recQuickSort($arr, $partition +1, $right);
 }
}
function patitionIt(&$arr, $left, $right, $pivot)
{
 $leftptr = $left - 1;
 $rightptr = $right;
 
 while (true)
 {
  while ($arr[++$leftptr] < $pivot)
  {
   ;
  }    
  while ($rightptr > 0 &&
    $arr[--$rightptr] > $pivot)
    {
    }
  if($leftptr >= $rightptr)
  {
   break;
  }else 
  {
   swap($arr, $leftptr, $rightptr);
  }
 }
 return $leftptr;
}
quickSort();
$end = microtime(true);
echo $end - $start;
?>

作者: jfcat   发布时间: 2008-06-27

完全可以使用内置的sort函数

如果要学习如何进行算法实现,不妨考虑使用C/C++、Pascal语言等

作者: ShiningRay   发布时间: 2008-06-27

算法只是思想吗,为什么要分实现的语言呢,不同的语言只要能实现就行

作者: jfcat   发布时间: 2008-06-30

觉得那个帽泡排序很实在用,DING下,

作者: dersym   发布时间: 2008-06-30

冒泡算法。学C语言时的经典例子

作者: dmkf   发布时间: 2008-07-01

引用:
原帖由 dersym 于 2008-6-30 23:45 发表
觉得那个帽泡排序很实在用,DING下,
哪里实用了?
php内置的array_sort不是堆排序,就是快速排序,都是 O(log2n),冒泡一般来说只存在于教科书上
如果让我写一个简单的,我宁愿写一个二分查找+插入的混合算法,理论上也是O(log2n)

作者: slawdan   发布时间: 2008-07-01