hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 文章 - 后端开发 - 正文 看Cosplay古风插画小姐姐,合集图集打包下载:炫龙网 · 炫龙图库

PHP 排序算法之插入排序_后端开发

2019-12-10后端开发ki4网20°c
A+ A-
插进去排序 Insert Sort

● 插进去排序的头脑:

将一个待排序的无序的数组看做是两个列表,一个有序的列表,一个无序的列表,从无序的列表每次拿出一个待插进去的元素,插进去到有序的列表中,直到无序列表为空,排序终了

● 现实举例:

1. 有一个无序的一维数组是此次须要排序的数组,数组是:[36,12,96,-1]

2. 起首把数组的第一个元素 [36] 看做是一个自力的有序的列表,把剩下的元素 [12, 96, -1] 看做是一个无序的列表

3. 第一个待插进去的元素就是 12,要把 12 插进去到有序的列表中,起首须要 12 和 36 比较,假如带插进去的元素 12 小于 36, 就须要把 12 插进去到 36前面,也就是 36 要后移一名。

4. 插进去排序现实是须要比较数组元素的总数减一轮,由于第一个元素不须要比较。

$arr = [36,12,96,-1];
//待插进去的数
$insertValue = $arr[1];
//待插进去数前面的数的索引
$insertIndek = 1 - 1;
//$insertIndek >= 0 保证插进去轮回时,不越界,保证第一个元素的下标要大于等0
//$insertValue < $arr[$insertIndek] 保证待插进去的数还没有找到插进去的位置,即待插进去的数是小于它前面的那一个元素的
//相符上述前提的,须要将$arr[$insertIndek] 后移
while($insertIndek >= 0 && $insertValue < $arr[$insertIndek]) {
 $arr[$insertIndek+1] = $arr[$insertIndek]; $insertIndek--;
 //代表的就是有序列表的最前面一个元素的前面一个下标 -1;
}
//当退出轮回时,代表找到位置 $insertIndek + 1
$arr[$insertIndek + 1] = $insertValue;
//把插进去的元素插进去到有序列表的第一个位置或者是没发生交流就在自身的位置
$arr = [12,36,96,-1];
//待插进去的数
$insertValue = $arr[2];
//待插进去数前面的数的索引
$insertIndek = 2 - 1;
//$insertIndek >= 0 保证插进去轮回时,不越界,保证第一个元素的下标要大于等0
//$insertValue < $arr[$insertIndek] 保证待插进去的数还没有找到插进去的位置,即待插进去的数是小于它前面的那一个元素的
//相符上述前提的,须要将$arr[$insertIndek] 后移
while($insertIndek >= 0 && $insertValue < $arr[$insertIndek]) {
 $arr[$insertIndek+1] = $arr[$insertIndek];
 $insertIndek--;
 //代表的就是有序列表的最前面一个元素的前面一个下标 -1;
}
//当退出轮回时,代表找到位置 $insertIndek + 1
$arr[$insertIndek + 1] = $insertValue;//把插进去的元素插进去到有序列表的第一个位置或者是没发生交流就在自身的位置

顺次类推,获得完成的有序数组

5. 完全代码以下:

<?php
class InsertSort
{
 public static function insertArraySort(array $data):array
 { 
 if (!is_array($data)) {
 return ['message' => '待排序的序列非数组'];
 }
 $count = count($data);
 if ($count <= 1) {
 return $data;
 }
 for ($i = 1; $i < $count; $i++) {
 //待插进去的元素
 $insertValue = $data[$i];
 //待插进去数前面的数的索引
 $insertIndek = $i - 1;
 //$insertIndek >= 0 保证插进去轮回时,不越界,保证第一个元素的下标要大于等0\
 //$insertValue < $arr[$insertIndek] 保证待插进去的数还没有找到插进去的位置,即待插进去的数是小于它前面的那一个元素的
 //相符上述前提的,须要将$arr[$insertIndek] 后移
 while($insertIndek >= 0 && $insertValue < $data[$insertIndek]) {
 $data[$insertIndek+1] = $data[$insertIndek];
 $insertIndek--;//代表的就是有序列表的最前面一个元素的前面一个下标 -1;
 }
 //当退出轮回时,代表找到位置 $insertIndek + 1
 //把插进去的元素插进去到有序列表的第一个位置
 //或者是没发生交流,即待插进去元素大于有序列表的末了一个元素,那末这里只须要将有序列表的末了一个元素的索引 + 1,把待插进去元素放在后
 //面一名即可
 $data[$insertIndek + 1] = $insertValue;\ }
 return $data;
 }
 }
$arr = [36,12,96,-1];
var_dump(InsertSort::insertArraySort($arr));

以上就是PHP 排序算法之插进去排序的细致内容,更多请关注ki4网别的相干文章!

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  选择分享方式
  移步手机端
PHP 排序算法之插入排序_后端开发

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
标签:

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>