前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构和算法——插入排序

数据结构和算法——插入排序

作者头像
Lemon黄
发布2019-11-24 16:07:18
3940
发布2019-11-24 16:07:18
举报
文章被收录于专栏:Lemon黄Lemon黄

1、要解决的问题

给定如下所示的数字列表,请按升序对它们进行排序。

代码语言:javascript
复制
$numbers = [21,25,100,98,89,77];

要求

  • 对数字进行排序时,需要使用插入排序算法。
  • 用PHP实现该算法
2、伪代码说明

插入排序的工作方式是:维护已排序的子列表,一一提取主列表中的项目,然后将其插入子列表中,直到所有项目都从主列表移到子列表中为止。

绿色部分就是已排序的子列表

描述插入排序的伪代码如下:

代码语言:javascript
复制
FOR each element of the master list //循环主列表
 
    Extract the current item //提取当前索引元素
 
        Locate the position to insert by comparing with items from sub-list //通过与子列表中的项目进行比较来找到要插入的位置
 
        Insert the item to the position //将元素插入到子列表指定位置
 
END FOR//结束循环
3、PHP实现插入排序

我们需要一个FOR循环和一个WHILE循环。我们使用FOR循环来迭代主列表,并使用WHILE循环来定位插入项目的位置。

代码语言:javascript
复制
<?php
$masterList = [21, 25, 100, 98, 89, 77];
 
$subList = [];
 
for ($i = 0; $i < count($masterList); $i++) {
 
    $extractItem = $masterList[$i];
 
    $subList[] = $extractItem;
 
    // 通过与子列表中的项目进行比较来找到要插入的位置
    $positionFound = $i;
 
    while ($positionFound > 0 && $extractItem < $subList[$positionFound - 1]) {
        $subList[$positionFound] = $subList[$positionFound - 1];
        $positionFound = $positionFound - 1;
    }
 
    // 将元素插入到子列表指定位置
    $subList[$positionFound] = $extractItem;
 
}
 
print_r($subList);
 
// 输出:
/*
Array
(
    [0] => 21
    [1] => 25
    [2] => 77
    [3] => 89
    [4] => 98
    [5] => 100
)
*/

唯一需要说明的部分可能是WHILE循环。注意循环的条件,除了限制子列表的长度外,我们还需要确保提取第一个元素($ positionFound = 0)时不运行循环。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lemon黄 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2、伪代码说明
  • 3、PHP实现插入排序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档