首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

点击上方“Lemon黄”关注我哦,不定期原创文,定期好技术文推广分享

1、要解决的问题

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

$numbers = [21,25,100,98,89,77];

要求

对数字进行排序时,需要使用插入排序算法。

用PHP实现该算法

2、伪代码说明

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

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

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

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循环来定位插入项目的位置。

$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)时不运行循环。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191118A0M79N00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券