1.希尔排序 -- Shell Insertion Sort

时间复杂度:数学家正在勤劳的探索!

适用条件: 直接插入排序的改进,主要针对移动次数的减少,这取决于"增量队列"的取值。适用的情况凭个人感觉用吧,我也不知道,反正,我并不认为自己是一个程序员,喜欢凭感觉行事。

 <?php
$arr = [3,4,5,1,11,9,27,27,18,20]; function shellSort(array &$arr,$dt)
{
// 跟增量相关,直接排序的改进版,当倒序时,可以极大减少移动的次数。
$straightInsertFunc = function (array &$arr,$dt)
{
$guild = 0; // 监视哨
array_unshift($arr, $guild);
$arr = array_values($arr);
$len = count($arr); for($j = 1+$dt;$j < $len;$j += 1)
{
if($arr[$j] < $arr[$j-$dt])
{
$arr[0] = $arr[$j];
$arr[$j] = $arr[$j-$dt];
for($k = $j-2*$dt;$k >0 && $arr[0] < $arr[$k];$k -= $dt)
{
$arr[$k+$dt] = $arr[$k];
}
$arr[$k+$dt] = $arr[0];
}
}
array_shift($arr);
}; if($dt <= 0)
{
throw new Exception('Param $dt error!');
} for($i = $dt; $i >= 1; --$i)
{
$straightInsertFunc($arr,$dt);
}
} shellSort($arr,1);
echo implode(',',$arr);

运行结果:

最新文章

  1. cxf和spring结合
  2. (转) C++中基类和派生类之间的同名函数的重载问题
  3. HDU 1875 畅通工程再续 (prim最小生成树)
  4. php通过正则从字符串中获取所有图片url地址
  5. 【JavaScript】JavaScript Promise 探微
  6. [Everyday Mathematics]20150207
  7. js实现中文简繁切换效果
  8. itext poi 学习之旅 (2)创建excel
  9. jquery更新后怎样在一个站点中使用两个版本号的jQuery
  10. Arduino红外遥控系列教程2013——红外转码
  11. Modular Inverse(模逆元,扩展欧几里德)
  12. border-sizing属性
  13. Mybatis 入门之resultMap与resultType解说实例
  14. Spring MVC 知识点记忆
  15. 无状态shiro认证组件(禁用默认session)
  16. DLL中获取主程序句柄
  17. Golang实现一个密码生成器
  18. log4j.properties配置文件详解
  19. OpenFileDialog 打开文件对话框
  20. 在Windows控制台应用程序中使用CString

热门文章

  1. Tempter of the Bone(DFS+剪枝)
  2. CentOS7.2防火墙配置
  3. charles 高亮Hosts
  4. 004:CSS三大重点之二:浮动(拖标、不占位置、转行内块)
  5. NPOI导出2007格式报错:文件损坏
  6. [LeetCode] 由 “找零钱&quot; 所想
  7. C# 反射基础用法
  8. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU硬件那些事(1)- 官方EVK简介
  9. ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介
  10. Graphlab create的基本使用