排序算法
常见的排序算法:
冒泡排序 - 对应的代码
function mao_pao(array $data)
{
if( !is_array($data) ) return $data;
$count = count($data);
if( $count < 2 ) return $data;
for ($i=1; $i < $count; $i++) {
for ($j= 0; $j < $count - $i; $j++) {
if( $data[$j] > $data[$j+1] ) {
$item = $data[$j];
$data[$j] = $data[$j+1];
$data[$j+1] = $item;
}
}
}
return $data;
}
注意:还有优化的空间
选择排序:
第一次先随便选择一个数,就是在要排序的数组中选择一个元素和数组的其它元素比较。然后比较交换位置得到最小值或者最大值,然后再次在剩下的数组中,选择一个数和数组剩下的元素比较,最后得到第二个最小或最大的元素。
function kuai_su($data)
{
if( !is_array($data) ) return $data;
$count = count($data);
if( $count < 2 ) return $data;
for ($i=0; $i < $count; $i++) {
$minIndex = $i;
$min = $data[$i];
for ($j= $i+1; $j < $count ; $j++) {
if( $min > $data[$j] ) {
$min = $data[$j];
$minIndex = $j;
}
}
if( $minIndex != $i ) {
$data[$minIndex] = $data[$i];
$data[$i] = $min;
}
}
return $data;
}
插入排序:未排序的数据逐个插入到已排序的序列中,从而得到一个有序的序列
function insert_sort($data)
{
if( !is_array($data) ) return $data;
$count = count($data);
if( $count < 2 ) return $data;
for ($i=1; $i < $count; $i++) {
$value = $data[$i];
$j = $i - 1;
while ($j >= 0 && $data[$j] > $value ) {
$item = $data[$j+1];
$data[$j+1] = $data[$j];
$data[$j] = $item;
$j = $j-1;
}
}
return $data;
}
归并排序
快速排序
function quick_sort($arr)
{
$count = count($arr);
if( $count <=1 )
{
return $arr;
}
$middleValue = $arr[0];
$leftData = $rightData = [];
for ($i=1;$i<$count;$i++)
{
if( $middleValue <= $arr[$i] ) {
$leftData[] = $arr[$i];
} else {
$rightData[] = $arr[$i];
}
}
$leftData = quick_sort($leftData);
$rightData = quick_sort($rightData);
return array_merge($leftData, [$middleValue], $rightData);
}