排序演算法的php實現

2021-08-18 20:03:26 字數 1343 閱讀 3625

插入排序原理:給定乙個無序陣列a,假設元素a[0]-a[i-1]有序,則從a[i]開始和陣列a[0]-a[i-1]之間的元素進行比較,將a[i]插入到合適的位置,從而保證a[0]-a[i]有序,以此類推,將整個陣列排序。插入排序演算法的最大時間複雜度是o(n^2),插入排序適合基本有序的陣列結構,它的最小的時間複雜度接近o(n),那麼為了儘量減少插入排序的時間複雜度,因此引入了希爾排序,希爾排序是插入排序的優化方案,它引入乙個增量的概念,使陣列按照增量增長有序,依次減少增量到1,使整個陣列有序,以此來減少時間複雜度,希爾排序的時間複雜度是o(nlogn),並且

插希爾排序不是穩定的排序演算法.

插入排序

function insertsort(array &$a)

else

}

$a[$j] = $tmp;

}

}

}

希爾排序

function shellsort(array &$a, $incre)

else

}$a[$j+$incre] = $tmp;}}

$incre = intval($incre/2);

if($incre < 1)

}}

$a = [0,20,7,-1,6,2,6,2,8,9,0,1];

shellsort($a, 3);

執行結果:0,-1,0,1,2,2,6,6,7,8,9,20

快排:

function qsort(array &$a, $low, $high)

$index = partition($a,$low,$high);

qsort($a,$low,$index-1);

qsort($a,$index+1,$high);

}

//元素相互賦值比交換效率

function partition(array &$a, $low, $high)

$a[$low] = $a[$high];

while($low < $high && $a[$low] <= $temp)

$a[$high] = $a[$low];

}

$a[$low] = $temp;

return $low;

}

$a = [0,20,7,-1,6,2,6,2,8,9,0,1];

qsort($a, 0, count($a) -1);

var_dump(implode(',', $a));

結果展示:-1,0,0,1,2,2,6,6,7,8,9,20

PHP 演算法 堆排序的PHP實現

1.堆 二叉堆 可以視為一棵完全的二叉樹,除了最底層之外,每一層都是滿的,這使得堆可以利用陣列來表示,每乙個結點對應陣列中的乙個元素 2.給出某個結點的下標,可以計算出父結點的和孩子結點的下標 parent i floor i 2 left i 2i right 2i 1 3.最大堆和最小堆,最大堆...

PHP 演算法 堆排序的PHP實現

1.堆 二叉堆 可以視為一棵完全的二叉樹,除了最底層之外,每一層都是滿的,這使得堆可以利用陣列來表示,每乙個結點對應陣列中的乙個元素 2.給出某個結點的下標,可以計算出父結點的和孩子結點的下標 parent i floor i 2 left i 2i 1 right 2i 2 3.最大堆和最小堆,最...

php 實現常見的排序演算法

氣泡排序 bubble sort 從前往後,也可以從後往前,用第乙個元素和第二個元素進行比較,大於第二個元素就交換,然後用第二個元素和第三個元素進行比較,大於第三個元素就交換,直到最大的數到了最後乙個,之後在從前往後,直到最大的數到了倒數第二個,以此類推,直到剩下乙個元素。1 function bu...