您的位置:首页 > 编程语言 > PHP开发

PHP 直接插入排序

2012-08-16 21:07 127 查看
一般直接插入排序的时间复杂度为O ( n^2 ) ,但是当数列基本有序时,如果按照有数列顺序排时,时间复杂度将改善到O( n )

<?php
#指定部分数组元素全部向后移动一位
function move(Array $arr, $start = null, $end = null) {
if(!isset($start) || $start < 0) $start = 0;
if(!isset($end) || $end >= count($arr)) $end = count($arr) - 2;    #最后只能选到倒数第二个元素
for($i = $end; $i >= $start; $i--) {
$arr[$i + 1] = $arr[$i];
}
return $arr;
}

#插入排序,使用同一个数组后移方法实现
function insertSort(Array $arr) {
for($i = 1; $i < count($arr); $i++) {    #未排序数组,从第二个元素开始
$insertEle = $arr[$i];    #待插入元素
for($j = 0; $j < $i; $j++) {    #已排序好数组,从第一个元素开始
if($arr[$j] > $arr[$i]) {    #按升序排序
$arr = move($arr, $j, $i - 1);    #先将已排序好数组中大于待插入元素的元素全部后移一位
$arr[$j] = $insertEle;    #插入待插入元素
break;
}
}
}
return $arr;
}

$arr = array(5, 1, 7, 4, 6, 2);
$arr = insertSort($arr);
print_r($arr);
?>


输出:


Array ( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 6 [5] => 7 )


排序过程如下,红色为已排好序部分

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: