思路:
- 两层循环,外层控制选取待排序元素,内层控制将已排好序的元素与待排序元素作比较,插入正确位置
- 将第一个元素单作排好序的左数组
- 从第二个元素开始选择待排序元素
- 以此与排好序的元素比较
要点:设立哨兵
直接插入排序示例:
function insertSort($arr)
{
for ($i=1;$i<count($arr);$i++){
$tmp = $arr[$i];//选取待排序元素
for ($j=$i-1;$j>=0;$j--){
//依次比较,如果大于等于,break(本例升序)
if($tmp >= $arr[$j]) break;
//交换位置
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}
}
return $arr;
}
$arr = [9,8,7,6,5,9,4,3,2,1,0,11];
$data = insertSort($arr);
var_dump($data);
效率:
时间复杂度:O(n^2).