zoukankan      html  css  js  c++  java
  • PHP 插入排序 -- 希尔排序

    1.希尔排序 -- Shell Insertion Sort

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

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

     1 <?php
     2 $arr = [3,4,5,1,11,9,27,27,18,20];
     3 
     4 
     5 function shellSort(array &$arr,$dt)
     6 {
     7     // 跟增量相关,直接排序的改进版,当倒序时,可以极大减少移动的次数。
     8     $straightInsertFunc = function (array &$arr,$dt)
     9     {
    10         $guild = 0;  // 监视哨
    11         array_unshift($arr, $guild);
    12         $arr = array_values($arr);
    13         $len = count($arr);
    14 
    15         for($j = 1+$dt;$j < $len;$j += 1)
    16         {
    17             if($arr[$j] < $arr[$j-$dt])
    18             {
    19                 $arr[0] = $arr[$j];
    20                 $arr[$j] = $arr[$j-$dt];
    21                 for($k = $j-2*$dt;$k >0 && $arr[0] < $arr[$k];$k -= $dt)
    22                 {
    23                     $arr[$k+$dt] = $arr[$k];
    24                 }
    25                 $arr[$k+$dt] = $arr[0];
    26             }
    27         }
    28         array_shift($arr);
    29     };
    30 
    31     if($dt <= 0)
    32     {
    33         throw new Exception('Param $dt error!');
    34     }
    35 
    36     for($i = $dt; $i >= 1; --$i)
    37     {
    38         $straightInsertFunc($arr,$dt);
    39     }
    40 }
    41 
    42 shellSort($arr,1);
    43 echo implode(',',$arr);

    运行结果:

    学习记录,方便复习
  • 相关阅读:
    多线程交替打印示例
    单列集合框架体系Collection
    同域名下,两个网站通过cookie共享登录注册功能大概思路。
    CSS 隐藏滚动条
    Vue3--组件间传值
    TypeScript--类(class)
    TypeScript--泛型(generic)
    理解LDAP与LDAP注入
    CRLF injection 简单总结
    pigctf期末测评
  • 原文地址:https://www.cnblogs.com/jingjingdidunhe/p/6487109.html
Copyright © 2011-2022 走看看