`Laravel`版`小丑路人社区`改版中,与`Hyperf版小丑路人社区`数据互动,此版本改版中……尚未彻底完结!

Q:

插入排序(Insertion Sort)

概念

插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

步骤

  • 从第一个元素开始,该元素可以认为已经被排序
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描
  • 如果该元素(已排序)大于新元素,将该元素移到下一位置
  • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  • 将新元素插入到该位置中
  • 重复步骤2

实例

/**
 * 插入排序
 *
 * @param  array  $arr
 */
static function insertSort(array &$arr): void
{
    if (empty($arr)) return;
    $count = count($arr);

    for ($i = 1; $i < $count; $i++)
    {
        // 当前要对比的元素
        $temp = $arr[$i];
        // 往前去对比,对比到第一个下标即可完成一轮
        for ($j = $i - 1; $j >= 0; $j--)
        {
            if ($temp < $arr[$j]) //从小到大 < || 从大到小 >
            {
                // 元素小于,与之后的交换位置
                $arr[$j+1] = $arr[$j];

                // 将前面的数设置为 当前需要交换的数
                $arr[$j] = $temp;
            }else{ // 当前一轮完成
                break;
            }
        }
    }
}
技术分享
订阅

评论记录


评论/回复