PHP三中常见的排序算法

<?php
/*
冒泡排序
原理:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。
*/

/**
 * $data Array 待排序数据
 * $sort Bool false 从小到大 true 从大到小
 * return Array 排序结果 
 */
$data = array(16,2,33,4,25,61,57,88,19,120);
function bubble_sort($data=array(),$sort=false)
{
 $len= count($data);
 if($len<=1) return $data;
 for ($i=0; $i <$len ; $i++) 
 { 
 for ($j=$i+1; $j <$len ; $j++) 
 { 
 if(($data[$i]<$data[$j]) && $sort)
 {
 $temp = $data[$j];
 $data[$j]=$data[$i];
 $data[$i]=$temp;
 }
 if( ($data[$i]>$data[$j]) && !$sort)
 {
 $temp = $data[$i];
 $data[$i]=$data[$j];
 $data[$j]=$temp;

 }
 }
 }
 return $data;
}


// $result = bubble_sort($data);
// echo '<pre>';
// print_r($result);


/**
 * 快速排序
 * 原理:
 * 通过一趟排序(参照一个待排序数字)将要排序的数据分割成独立的两部分
 * 结果其中一部分的所有数据都比另外一部分的所有数据都要小
 * 然后再按此方法对这两部分数据分别进行快速排序,
 * 整个排序过程可以递归进行,以此达到整个数据变成有序序列。
 */


/**
 * $data Array 待排序数据
 * $sort Bool false 从小到大 true 从大到小
 * return Array 排序结果 
 */

function quick_sort($data=array(),$sort=false)
{
 $len = count($data);
 if($len<=1) return $data;
 // 选取一个参考数字 把data分成两部分
 $refer = $data[0];
 // 保存较小的部分
 $minarr = array();
 // 保存较大的部分
 $maxarr = array();
 for ($i=1; $i <$len ; $i++) 
 { 
 if($data[$i] < $refer)
 {
 $minarr[] = $data[$i];
 }
 else
 {
 $maxarr[] = $data[$i];
 }
 }
 // 递归再次比较 minarr 和maxarr
 $minarr = quick_sort($minarr,$sort);
 $maxarr = quick_sort($maxarr,$sort);
 if(!$sort)
 {
 return array_merge($minarr,array($refer),$maxarr);
 }
 else
 {
 return array_merge($maxarr,array($refer),$minarr);
 }

}

// $result = quick_sort($data,true);
// echo '<pre>';
// print_r($result);


/**
 * 选择排序 
 * 原理:
 * 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,
 * 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
 */

/**
 * $data Array 待排序数据
 * $sort Bool false 从小到大 true 从大到小
 * return Array 排序结果 
 */
function select_sort($data=array(),$sort=false)
{
 $len = count($data);
 if($len<=1) return $data;
 for ($i=0; $i <$len ; $i++) 
 { 
 $refer = $i; //最小参考
 for ($j=$i+1; $j <$len ; $j++) 
 { 
 if((($data[$j] < $data[$refer])&&!$sort)||(($data[$j] > $data[$refer])&&$sort))
 {
 $refer = $j;
 }
 }
 if($refer!=$i)
 {
 $temp = $data[$refer];
 $data[$refer] = $data[$i];
 $data[$i]=$temp; 
 } 
 }
 return $data;
}



// $result = select_sort($data,true);
// echo '<pre>';
// print_r($result);


未经允许不得转载:开心乐窝-乐在其中 » PHP三中常见的排序算法

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏