插入排序 php,PHP实现-插入排序

本文深入解析了插入排序的基本原理,包括逐个插入元素的过程,以及其实现的两种常见版本。特别关注了其时间复杂度O(n^2)和空间复杂度O(1),并讨论了在数据较少和特定比较代价情景下的应用。还介绍了插入排序的变种——二分查找排序。
摘要由CSDN通过智能技术生成

思路分析

每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。(从而得到一个新的、个数加一的有序数据)

/*

* 插入排序法

* 每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

* */

function insertSort($arr){

$len = count($arr);

if ($len <= 1) {return $arr;}

//先默认$array[0],已经有序,是有序表

for($i = 1;$i 

if ($arr[$i] 

$insertVal = $arr[$i]; //$insertVal是准备插入的数

$insertIndex = $i - 1; //有序表中准备比较的数的下标

while($insertIndex >= 0 && $insertVal 

$arr[$insertIndex + 1] = $arr[$insertIndex]; //将数组往后挪

$insertIndex--; //将下标往前挪,准备与前一个进行比较

}

if($insertIndex + 1 !== $i){

$arr[$insertIndex + 1] = $insertVal;

}

}

}

return $arr;

}

function insertSort2($arr){

$len = count($arr);

if ($len <= 1) {return $arr;}

//先默认$array[0],已经有序,是有序表

for($i = 1;$i 

if ($arr[$i] 

$insertVal = $arr[$i]; //$insertVal是准备插入的数

//$j 有序表中准备比较的数的下标

//$j-- 将下标往前挪,准备与前一个进行比较

for ($j = $i-1;$j >= 0 && $insertVal 

$arr[$j+1]= $arr[$j];//将数组往后挪

}

$arr[$j + 1] = $insertVal;

}

}

return $arr;

}

小结:

时间复杂度:O(n^2)

空间复杂度:O(1)

算法适用于少量数据的排序

如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。

插入排序属于稳定排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值