新浦京81707con > 注册购买 > 实现方法详解,实例分析

原标题:实现方法详解,实例分析

浏览次数:151 时间:2019-07-24

咱俩来看这几个顺序:

看文字描述不必然看得懂,看代码吧:

在线动画演示插入/选用/冒泡/归并/Hill/急速排序算法进度工具:

算法实现:

地点的这段代码严俊意义上说,不到底正式的冒泡排序,因为它不满足“两两比较相邻记录”的冒泡排序观念,它可是是贰个归纳的调换排序。思路可是是:从第一个非常重要字开首,将每一个人第一字与它背后的兼具注重字相相比,交流获得当中的极小值。但那个算法是十分的低效的。

<?php
/**
 * 希尔排序
 */
function shell_sort(array $arr){
  // 将$arr按升序排列
  $len = count($arr);
  $f = 3;// 定义因子
  $h = 1;// 最小为1
  while ($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;
}
$arr = array(14, 9, 1, 4, 6, -3, 2, 99, 13, 20, 17, 15, 3);
$shell = shell_sort($arr);
echo '<pre>';
print_r($shell);
/**
*
Array
(
[0] => -3
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 6
[6] => 9
[7] => 13
[8] => 14
[9] => 15
[10] => 17
[11] => 20
[12] => 99
)
)
*
*/

你大概感兴趣的稿子:

  • PHP排序算法之归并排序(Merging Sort)实例详解
  • PHP排序算法之神速排序(Quick Sort)及其优化算法详解
  • PHP排序算法之基数排序(Radix Sort)实例详解
  • PHP排序算法之堆排序(Heap Sort)实例详解
  • PHP排序算法之Hill排序(Shell Sort)实例分析
  • PHP排序算法之简明选择排序(Simple Selection Sort)实例解析
  • PHP排序算法之冒泡排序(Bubble Sort)达成方式详解
  • PHP 急速排序算法详解
  • PHP 冒泡排序算法的落到实处代码
  • PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
  • PHP多种排序算法达成及效用分析【冒泡排序,插入排序,选取排序和飞跃排序】

在线动画演示插入/选取/冒泡/归并/希尔/快捷排序算法进程工具:

精晓那些纷纷的排序算法依然很有趣的,体会这么些排序算法的精致~

PS:这里再为大家推荐一款有关排序的身体力行工具供我们参照他事他说加以考察:

PS:这里再为大家推荐一款有关排序的以身作则工具供我们参谋:

PS:这里再为大家推荐一款有关排序的身体力行工具供我们仿效:

直接插入排序是由两层嵌套循环组成的。外层循环标志并垄断(monopoly)待比较的数值。内层循环为待比较数值鲜明其最终地方。直接插入排序是将待相比较的数值与它的前一个数值举行比较,所以外层循环是从第一个数值开首的。当前一数值比待相比较数值大的状态下一连循环比较,直到找到比待比较数值小的并将待比较数值置入其后一岗位,甘休该次循环。

代码改换的机要就是在 i 变量的for循环中,扩大了对flag是或不是为 true 的论断,经过如此的查对,冒泡排序在品质上就有了部分升任,能够免止因曾经稳步的事态下的虚幻循环判定。

本文实例陈诉了php实现Hill排序算法的措施。分享给我们供大家参谋,具体如下:

<?php
//直接插入排序
function swap(array &$arr,$a,$b){
  $temp = $arr[$a];
  $arr[$a] = $arr[$b];
  $arr[$b] = $temp;
}
function InsertSort(array &$arr){
  $count = count($arr);
  //数组中第一个元素作为一个已经存在的有序表
  for($i = 1;$i < $count;$i   ){
    $temp = $arr[$i];   //设置哨兵
    for($j = $i - 1;$j >= 0 && $arr[$j] > $temp;$j --){
      $arr[$j   1] = $arr[$j];    //记录后移
    }
    $arr[$j   1] = $temp;   //插入到正确的位置
  }
}
$arr = array(9,1,5,8,3,7,4,6,2);
InsertSort($arr);
var_dump($arr);

正文实例陈说了PHP排序算法之冒泡排序(Bubble Sort)完成格局。分享给大家供我们仿效,具体如下:

即便如此今后种种程序语言都有其各自庞大的排序库函数,不过这么些底层完成也都以使用那几个基础或高端的排序算法。

在线动画演示插入/选用/冒泡/归并/Hill/神速排序算法进度工具:

上边的冒泡排序算法是还是不是还能优化呢?答案是必定的。试想一下,假如大家待排序的行列是{2,1,3,4,5,6,7,8,9},也正是说,除了第一和第贰个首要字需求沟通外,别的都早已是健康的相继了。当 i = 0 时,沟通了 2 和 1 ,此时的队列已经是稳步的了,可是算法照旧不依不挠地将 i = 2 到 9 以及各类循环中的 j 循环都进行了一遍,固然并不曾调换数据,但是之后的大度相比依旧大大地多余了。
当 i = 2 时,大家曾经对 9 与 8,8 与 7,·······,3 与 2 做了相比较,未有别的数据沟通,那就印证此行列已经稳步,没有必要再持续前面包车型大巴循决断工作了(前边的办事也是不会时有爆发其余数据调换,再做也是向来不意义了)。为了兑现那一个主见,大家要求革新一下代码,增添一个标识变量 flag 来贯彻这一算法的改正:

越来越多关于PHP相关内容感兴趣的读者可查阅本站专项论题:《php排序算法总括》、《PHP数据结构与算法教程》、《php程序设总括法计算》、《PHP数组(Array)操作本领大全》、《php字符串(string)用法总括》、《PHP常用遍历算法与手艺总计》及《PHP数学生运动算技巧计算》

运作结果:

您或者感兴趣的稿子:

  • PHP排序算法之归并排序(Merging Sort)实例详解
  • PHP排序算法之急速排序(Quick Sort)及其优化算法详解
  • PHP排序算法之基数排序(Radix Sort)实例详解
  • PHP排序算法之堆排序(Heap Sort)实例详解
  • PHP排序算法之Hill排序(Shell Sort)实例深入分析
  • PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
  • PHP排序算法之大致选用排序(Simple Selection Sort)实例深入分析
  • PHP 快捷排序算法详解
  • PHP 冒泡排序算法的完毕代码
  • PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
  • PHP多种排序算法达成及效用分析【冒泡排序,插入排序,选用排序和便捷排序】

您或然感兴趣的小说:

  • PHP排序算法之直接插入排序(Straight Insertion Sort)实例深入分析
  • PHP排序算法之简明采纳排序(Simple Selection Sort)实例深入分析
  • PHP排序算法之冒泡排序(Bubble Sort)完成格局详解
  • PHP 快捷排序算法详解
  • PHP 冒泡排序算法的贯彻代码
  • PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
  • php达成的广阔排序算法汇总
  • PHP 各类排序算法实当代码
  • PHP简单选取排序算法实例
  • PHP排序算法之希尔排序(Shell Sort)实例深入分析

直接插入排序是安静排序。

冒泡排序算法革新:

知道这一个算法,最佳是有个图示。就先来代码吧。

本文由新浦京81707con发布于注册购买,转载请注明出处:实现方法详解,实例分析

关键词: 新浦京81707con

上一篇:MySQL如何修改账号的IP限制条件详解,修改账号的

下一篇:没有了