插入排序的邏輯:
假設(shè)Array A
為已經(jīng)排序好的數(shù)組,此時(shí)需要從Array B
中抽取最靠前的元素插入到Array A
中,且需要按順序插入。
變形:
如果只有Array A
,而不存在Array B
。現(xiàn)在對(duì)Array A
自己進(jìn)行插入排序。可以默認(rèn)認(rèn)為Array A
中的前半段為已排序好的數(shù)組,后半段為未排序數(shù)組,而元素K
為目前正要進(jìn)行排序的元素。此時(shí)前半段可以表示為A[0-(k-1)]
,后半段為A[(k+1)-(n-1)]
,n
為數(shù)組長(zhǎng)度
代碼實(shí)現(xiàn):
<?php
$a = array(5,2,4,6,1,3);
$b = array(31,41,59,26,41,48);
function insertionSortAsc($a = array())
{
$length = count($a);
for ($j = 1; $j < $length; $j++) {
$current = $a[$j];
$i = $j - 1;//從原有序deck中最后一位開始比較,從右向左
while ($i >= 0 && $a[$i] > $current) {
$a[$i + 1] = $a[$i];//將數(shù)字向左移動(dòng)一位
$i--;
}
$a[$i + 1] = $current;
}
return $a;
}
function insertionSortDesc($a = array())
{
$length = count($a);
for ($j = 1; $j < $length; $j++) {
$current = $a[$j];
$i = $j - 1;
while($i >= 0 && $a[$i] < $current) {
$a[$i + 1] = $a[$i];//將數(shù)字向左移動(dòng)一位
$i--;
}
$a[$i + 1] = $current;
}
return $a;
}
print_r(insertionSortAsc($a));
print_r(insertionSortDesc($b));
輸出結(jié)果:
result_Image.png