算法入门之希尔排序

希尔排序原理:

希尔排序是把一个数组划分为多个相隔h单位的h数组,对每一个这样的数组应用插入排序

希尔排序是基于插入排序的一种改进算法

实现如下:

<?php
function exch(&$a, $i, $j) {
    $tmp = $a[$i];
    $a[$i] = $a[$j];
    $a[$j] = $tmp;
}

function less($m, $n) {
    return $m < $n;
}

function shell_sort(&$arr) {
    $len = count($arr);
    $h = 1;
    while($h < $len/3) $h = $h*3+1;
    while($h >= 1) {
        for($i = $h; $i < $len; $i++) {
            for($j = $i; $j >= $h && less($arr[$j], $arr[$j-$h]); $j -= $h) {
                exch($arr, $j, $j - $h);
            }
        }
        $h = intval($h/3);
    }
}

$a = array(7, 2, 5, 3, 8, 4, 9, 1, 6);
echo "7-2-5-3-8-4-9-1-6<br/>";
shell_sort($a);
print_r($a);


排序过程:

自己动手画出排序过程更有利于对排序算法的理解

array(7, 2, 5, 3, 8, 4, 9, 1, 6);//原始数组

array(7, 2, 5, 3, 8, 4, 9, 1, 6);//升序,不用操作

array(7, 2, 5, 3, 8, 4, 9, 1, 6);//升序,不用操作

array(7, 2, 5, 3, 8, 4, 9, 1, 6);//升序,不用操作

array(7, 2, 5, 1, 8, 4, 9, 3, 6);//降序,插入1

array(6, 2, 5, 1, 7, 4, 9, 3, 8);//降序,插入6

array(2, 6, 5, 1, 7, 4, 9, 3, 8);//降序,插入2

array(2, 5, 6, 1, 7, 4, 9, 3, 8);//降序,插入5

array(1, 2, 5, 6, 7, 4, 9, 3, 8);//降序,插入1

array(1, 2, 5, 67, 4, 9, 3, 8);//升序,不用操作

array(1, 2, 4, 56, 7, 9, 3, 8);//降序,插入4

array(124567, 9, 3, 8);//升序,不用操作

array(1, 2, 3, 45, 6, 7, 9, 8);//降序,插入3

array(1234567, 89);//降序,插入8,结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值