仍然是对插入排序算法的改进,增加了折半算法,主要是减少数据的移动次数,和折半查找算法是一个思想。
<?php
/**
* Created by PhpStorm.
* User: 1655664358@qq.com
* Date: 2018/6/14
* Time: 10:08
*/
class Person
{
public $id;
public $data;
}
function insertSort(&$data,$n)
{
for ($i=1;$i<$n;$i++){
$low = 0;
$high = $i-1;
$temp = $data[$i];
while ($low<=$high){
$mid = floor(($low+$high)/2);
if ($data[$mid]->id>$temp->id){
$high = $mid-1;
}else{
$low = $mid+1;
}
}
for ($j=$i;$j>$low;$j--){
$data[$j] = $data[$j-1];
}
$data[$low] = $temp;
}
}
(function(){
$person = new Person();
$index = ['23'=>'勺颠颠','65'=>'老油条','21'=>'烧包谷','9'=>'烧耳块','4'=>'肥嘟嘟','7'=>'霉戳戳','32'=>'一坨肉','6'=>'老扎哇'];
$data = [];
foreach ($index as $k=>$v){
$obj = clone $person;
$obj->id = $k;
$obj->data = $v;
$data[] = $obj;
}
insertSort($data,8);
print_r($data);
})();
结果:
Array
(
[0] => Person Object
(
[id] => 4
[data] => 肥嘟嘟
)
[1] => Person Object
(
[id] => 6
[data] => 老扎哇
)
[2] => Person Object
(
[id] => 7
[data] => 霉戳戳
)
[3] => Person Object
(
[id] => 9
[data] => 烧耳块
)
[4] => Person Object
(
[id] => 21
[data] => 烧包谷
)
[5] => Person Object
(
[id] => 23
[data] => 勺颠颠
)
[6] => Person Object
(
[id] => 32
[data] => 一坨肉
)
[7] => Person Object
(
[id] => 65
[data] => 老油条
)
)
© 著作权归作者所有
举报
发表评论
0/200