1. 程式人生 > >php三種排序算法

php三種排序算法

自增 fas 調用 桶排序 兩個 定義 進行 func ray

1.

<?php

/**
* 快速排序不費空間也節省時間
*/
$arr=array(5,1,8,2,6,4,9,3,7);
// $arr=array(1,2,3,4,5,6,7,8,9);
// $arr=array(9,8,7,6,5,4,3,2,1);
// $arr=array(1,5,9,7,6,4);
function fast($arr)
{
//統計數組長度
$length=count($arr);

//定義兩個空數組
$left=array();
$right=array();

//如果數組長度<1,返回數組
if($length<=1){
return $arr;
}
for($i=1;$i<$length;$i++){
//找一個數作為比較,為了方便數組中的第一個數
if($arr[0]>$arr[$i]){
//小於這個數的放入這個數組,第一次後數組中1243
$left[]=$arr[$i];
}else{
//大於這個數的放入這個數組,第一次後數組中8697
$right[]=$arr[$i];
}

}
var_dump($left);
//遞歸調用實現排序
$left=fast($left);
//把第一次比較數放入兩個數組中的一個
$left[]=$arr[0];
$right=fast($right);
return array_merge($left,$right);
}

var_dump(fast($arr));
?>

2.

<?php

/**
* 冒泡排序費時間
*/
//隨便定義一個數組,即要比較的數
$arr=array(12,11,63,9,25);
$arr=array(1,2,3,4,5,6,7,8,9);
//$arr=array(999,888,777,6,5,4,3,2,1);
function maopao($arr)
{
//統計數組的長度
$length=count($arr);

//外層循環就是數組有多少個數我就要把這個數組遍歷多少次,每一次裏層循環排好序的數組
for($i=0;$i<$length;$i++)
{
//裏層循環就是為了進行排序,$l-1是因為冒泡排序法只要比較$l-1次
for($j=0;$j<$length-1;$j++)
{
//如果相鄰數不比它後面的數小就不用排序,如果小後面的數會出現在前面的位置
if($arr[$j]<$arr[$j+1]){
$t=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$t;
}
}
}
return $arr;
}

var_dump(maopao($arr));
?>

3.

<?php
/**
* 桶排序費空間
*/


//定義一個數組,及要排序的數
$arr=array(3,5,5,2,8);

function tong($arr)
{
//定義一個一維數組,一定要比你所要比較的數大,數組裏的數就相當於一個桶,定義在100以內
$tong=range(0,100);

//把數組裏的數都 初始化為0
for($i=0;$i<=10;$i++){
$tong[$i]=0;
}

//重新給數組賦值
foreach($arr as $value){
//$arr中的數與$a中的索引對應,$arr中有一個$a的索引值就要自增, ++就是自增的意思
$tong[$value]++;
}

for($i=0;$i<=10;$i++){

//$j=1是因為,$a中索引值>=1的是我們想要輸出的
for($j=1;$j<=$tong[$i];$j++)
{
echo $i;
}
}

}

tong($arr);
?>

php三種排序算法