<?php
#直接插入排序,稳定
function InsertSort(&$arr){
$tmp=0;
$len=count($arr);
for ($i=1;$i<$len;$i++){
$tmp=$arr[$i];
$j=$i-1;
while ($tmp<$arr[$j]){
$arr[$j+1]=$arr[$j];
$j--;
}
$arr[$j+1]=$tmp;
}
}
#折半插入排序,稳定
function BinInsertSort(&$arr){
$tmp=0;
$len=count($arr);
for ($i=1;$i<$len;$i++){
$tmp=$arr[$i];
$low=0;
$high=$i-1;
while($low<=$high){
$mid=ceil(($low+$high)/2);
if ($tmp<$arr[$mid]){
$high=$mid-1;
}else{
$low=$mid+1;
}
}
for ($j=$i-1;$j>=$low;$j--){
$arr[$j+1]=$arr[$j];
}
$arr[$low]=$tmp;
}
}
#希尔排序,不稳定
function ShellInsert(&$arr,$d,$len){
for ($i=$d;$i<$len;$i++){
if ($arr[$i]<$arr[$i-$d]){
$tmp=$arr[$i];
$j=$i-$d;
while (($j>0)&&($tmp<$arr[$j])){
$arr[$j+$d]=$arr[$j];
$j=$j-$d;
}
$arr[$j+$d]=$tmp;
}
}
}
function ShellSort(&$arr){
$len=count($arr);
$d=$len;
while($d>1){
$d=ceil($d/2);
ShellInsert($arr, $d, $len);
echo '<br/>';
print_r($arr);
echo '<br/>';
}
}
#冒泡排序,稳定
function BubbleSort(&$arr){
$len=count($arr);
do{
$all=true;
for ($m=0;$m<$len-1;$m++){
$i=$m+1;
if ($arr[$m]>$arr[$i]){
$tmp=$arr[$m];
$arr[$m]=$arr[$i];
$arr[$i]=$tmp;
$all=false;
}
}
$len--;
}while (($all==false)&&($len!=1));
}
#快速排序,稳定
function QuickSort(&$arr,$l,$p){
$i=$l;
$j=$p;
$tmp=$arr[$i];
do{
while (($arr[$j]>=$tmp)&&($j>$i))
$j--;
if ($i<$j){
$arr[$i]=$arr[$j];
$i++;
while (($arr[$i]<=$tmp)&&($i<$j))
$i++;
if ($i<$j){
$arr[$j]=$arr[$i];
$j--;
}
}
}while ($i!=$j);
$arr[$i]=$tmp;
$j--;
$i++;
if ($l<$j)
QuickSort($arr, $l, $j);
if ($i<$p)
QuickSort($arr,$i,$p);
}
function SelectionSort(&$arr){
$len=count($arr);
for ($i=0;$i<$len-1;$i++){
$m=$i;
for ($j=$i+1;$j<$len;$j++){
if ($arr[$j]<$arr[$m])
$m=$j;
}
if ($m!=$i){
$tmp=$arr[$i];
$arr[$i]=$arr[$m];
$arr[$m]=$tmp;
}
}
}
$arr=array(2,3,4857,6,4,59,54,3,14,254);
echo "before <br/>";
var_dump($arr);
SelectionSort($arr);
echo "<br/>after <br/>";
var_dump($arr);
一些常见的排序算法(php语言)
最新推荐文章于 2024-09-19 17:50:25 发布