当前位置: 首页 > news >正文

54、PHP 实现希尔排序

题目: PHP 实现希尔排序

描述:

  • 思路分析:希尔排序是基于插入排序的,区别在于插入排序是相邻的一个个比较(类似于希尔中h=1的情形),
  • 而希尔排序是距离h的比较和替换。

  • 希尔排序中一个常数因子n,原数组被分成各个小组,每个小组由h个元素组成,很可能会有多余的元素。
  • 当然每次循环的时候,h也是递减的(h=h/n)。第一次循环就是从下标为h开始。
  • 希尔排序的一个思想就是,分成小组去排序
function shell_sort(array $arr){// 将$arr按升序排列$len = count($arr);$f = 3;// 定义因子$h = 1;// 最小为1while ($h < $len/$f){$h = $f*$h + 1; // 1, 4, 13, 40, 121, 364, 1093, ...}while ($h >= 1){  // 将数组变为h有序for ($i = $h; $i < $len; $i++){  // 将a[i]插入到a[i-h], a[i-2*h], a[i-3*h]... 之中 (算法的关键)for ($j = $i; $j >= $h;  $j -= $h){if ($arr[$j] < $arr[$j-$h]){$temp = $arr[$j];$arr[$j] = $arr[$j-$h];$arr[$j-$h] = $temp;}//print_r($arr);echo '<br/>'; // 打开这行注释,可以看到每一步被替换的情形}}$h = intval($h/$f);}return $arr;
}
http://www.lryc.cn/news/412381.html

相关文章:

  • linux 虚拟机解压arm-linux-gcc-4.6.4-arm-x86_64.tar.bz2并arm-linux-gcc
  • 泛化的最近点迭代法(Generalized-ICP)
  • Java | Leetcode Java题解之第313题超级丑数
  • 单细胞数据整合-去除批次效应harmony和CCA (学习)
  • MuRF代码阅读
  • pycharm无法导入pyside2模块;“ModuleNotFoundError: No module named ‘PySide2“
  • c语言指针中“数组名的理解”以及“一维数组传参”的本质
  • 计算机毕业设计Python+Flask微博舆情分析 微博情感分析 微博爬虫 微博大数据 舆情监控系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
  • KubeBlocks v0.9 解读|最高可管理 10K 实例的 InstanceSet 是什么?
  • ZW3D二次开发_菜单_禁用/启用表单按钮
  • windows子系统wsl完成本地化设置locale,LC_ALL
  • MYSQL 根据条件order by 动态排序
  • DirectX修复工具下载安装指南:电脑dll修复拿下!6种dll缺失修复方法!
  • vue3(1)虚拟数字键盘的封装,(2)以及子组件改变父组件变量的值进而使子组件实时响应值的变化,(3)子组件调用父组件中的方法(带参)
  • 反序列化靶机serial
  • 扎克伯格说Meta训练Llama 4所需的计算能力是Llama 3的10倍
  • CTFHUB-文件上传-双写绕过
  • RabbitMQ docker部署,并启用MQTT协议
  • Python面试宝典第25题:括号生成
  • 计算机毕业设计选题推荐-社区停车信息管理系统-Java/Python项目实战
  • Python面试整理-自动化运维
  • 自动化测试与手动测试的区别!
  • 下属“软对抗”,工作阳奉阴违怎么办?4大权谋术,让他不敢造次
  • 爬猫眼电ying
  • 政安晨:【Keras机器学习示例演绎】(五十七)—— 基于Transformer的推荐系统
  • 15.4 zookeeper java client之Curator使用(❤❤❤❤❤)
  • 哈默纳科HarmonicDrive谐波减速机的使用寿命计算
  • 前后端完全分离实现登录和退出
  • 生信技能55 - WisecondorX分析结果过滤和质控
  • 待办管理软件电脑版哪个好?待办事项清单app