PHP數據結構(2)冒泡排序及變種

<?php
//經典冒泡排序


function bubble_sort($array){
$count=count($array);
for($i=0;$i<$count;$i++){
for($j=$i+1;$j<$count;$j++){
if($array[$i]>$array[$j]){
$tmp=$array[$i];
$array[$i]=$array[$j];
$array[$j]=$tmp;
}
}
}
return $array;
}


//線性表的刪除(數組中)
function delete_array_element($array,$i){
$len=count($array);
for($j=$i;$j<$len;$j++){
$array[$j]=$array[$j+1];
}
array_pop($array);
return $array;
}


$str=array(3,5,2,57,43,64,22);
print_r(bubble_sort($str));
$arr=bubble_sort($str);
echo "<br/>";


foreach($arr as $key => $an){
echo $key.",".$an."<br/>";
}

?>

改進後的冒泡排序(雞尾酒排序法)

<?php
//冒泡排序變種__雞尾酒排序(雙向排序)
//說明:冒泡排序是單向進行比較替換排序,雞尾酒排序是單向進行比較替換之後從後往前再一次進行一樣的排序,使用於有部分已經排好序的排序列表

function cocktail_sort($array){
$swapped=1;/變/設置一個量

$length=count($array);//獲取數組個數
while($swapped==1){
//正向比較相鄰兩值得大小,如果前一個比後一個大,進行替換
for($i=0;$i<$length-1;$i++){
if($array[$i]>$array[$i+1]){
$tmp=$array[$i];
$array[$i]=$array[$i+1];
$array[$i+1]=$tmp;
$swapped=1;
}
}
//設置結束條件,當沒有可交換的相鄰值時即跳出循環,不設置結束條件將是一個死循環
$swapped=0;
//反向比較相鄰兩值的大小,如果後一個比前一個小,進行替換
for($j=($length-1);$j>0;$j--){
if($array[$j]<$array[$j-1]){
$tmp=$array[$j];
$array[$j]=$array[$j-1];
$array[$j-1]=$tmp;
$swapped=1;
}
}

}
return $array;
}


$str=array(2,3,4,5,1);
$query=cocktail_sort($str);
foreach($query as $key => $value){
echo "key:".($key+1)."value:".$value."<br/>";
}

?>

發佈了32 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章