vlambda博客
学习文章列表

PHP 插入排序 - 希尔排序

<?php
function microtime_float(){ list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec);}
//冒泡, 插入排序, 每次交换消除一个逆序对. 要提高算法的效率, 我们必须每次消除不止一个逆序对, 每次交换相隔较远的两个元素//TODO : 插入排序 - 希尔排序 (希尔增量 L/2)//还有一些其它的增量: Hibbard增量:{1, 3, ..., 2^k-1} ...function ShellSort($data, $L){ $time_start = microtime_float(); for ($i = floor($L / 2); $i > 0; $i = floor($i / 2)) { //增量 for ($j = $i; $j < $L; $j++) { //插入排序 for ($k = $j; $k >= $i && $data[$k] < $data[$k - 1]; $k -= $i) { list($data[$k], $data[$k - 1]) = [$data[$k - 1], $data[$k]]; } } } $time_end = microtime_float();
echo "ShellSort - Time:" . ($time_end - $time_start) . "s" . "<br/>"; return $data;}

function main(){ //TODO : 生成数据 $number = []; for ($i = 0; $i < 10000; $i++) { $number[] = rand(0, 1000000000); }
// echo "<pre>";// print_r($number);// print_r(ShellSort($number, count($number)));
ShellSort($number, count($number));}
main();