標籤:
<?php
/**
*選擇排序也就是冒泡排序,就是基於各個資料之間的對比來排序
*
*/
$arr = array(2,1,7,5,8,9,3,4,10,30,28,24);
function bubbleSort($arr) {
$len = count($arr);
$k = 0;
for($i=0;$i<$len;$i++){
$k++;
for($j=$i+1;$j<$len;$j++) {
if($arr[$i] > $arr[$j]) {
$k++;
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
echo $k;
return $arr;
}
print_r(bubbleSort($arr));
/**
*插入排序
* 插入排序可以避免需要排序的資料中有一部分是已經有序的樹據在排序
* 判斷當前位置i後邊的資料是否已經有序.
*/
function insertSort($arr) {
$len = count($arr);
$k = 0;
for($i=1;$i<$len;$i++) {
$k++;
//排序 $arr[i],$arr[$i-1],....,$arr[i-n]
for($j=$i;$j > 0 && ($arr[$j-1] > $arr[$j]);$j--) {
$tmp = $arr[$j-1];
$arr[$j-1] = $arr[$j];
$arr[$j] = $tmp;
$k++;
}
}
echo $k;
return $arr;
}
print_r(insertSort($arr));
/***
*希爾排序
* 希爾排序是對插入排序的最佳化,希爾排序對於大的亂序資料具有很好的處理能力
*
*/
function heerSort($arr) {
$len = count($arr);
$tmp = ‘‘;
$h = (int)$len/2;
$k = 0;
while($h >=1) {
$k++;
for($i=$h;$i<$len;$i++) {
$k++;//排序 $arr[i],$arr[$i-h],....,$arr[i-n*h]
for($j=$i;$j >= $h && ($arr[$j-$h] > $arr[$j]);$j--) {
$tmp = $arr[$j-$h];
$arr[$j-$h] = $arr[$j];
$arr[$j] = $tmp;
$k++;
}
}
$h = (int)$h/2;
}
echo $k;
return $arr;
}
print_r(heerSort($arr));
php實現的冒泡,插入排序,希爾排序,歸併排序