菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
2317
1

排序算法:插入折半排序 PHP 版

原创
05/13 14:22
阅读数 1794

仍然是对插入排序算法的改进,增加了折半算法,主要是减少数据的移动次数,和折半查找算法是一个思想。

<?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
2317 点赞
1 评论
收藏
为你推荐 换一批