<?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三中常见的排序算法

