插入排序算法详解:Python与PHP代码实现及性能分析
本文详细讲解插入排序算法的核心逻辑,并提供Python与PHP两种语言的具体代码实现。通过对比冒泡排序与选择排序,分析插入排序在特定场景下的性能优势。文章包含完整的时间复杂度O(n2)解析及代码示例,帮助开发者快速掌握该算法的应用。
以下是使用Python语言实现的插入排序代码。该实现首先生成一个包含36个随机整数(范围1至999)的列表,随后通过定义的insertionSort函数进行排序。算法遍历从第二个元素开始的数组,若当前元素小于前一个元素,则将其暂存并向前查找合适位置,将较大元素依次后移,最后将暂存元素插入正确位置。
import random
a=[random.randint(1,999) for x in range(0,36)]
# 直接插入排序算法
def insertionSort(a):
for i in range(1,len(a)):
# 若下标为i的元素小于下标为i-1的元素,则将下标为i的元素放到合适位置
if a[i] < a[i-1]:
tmp = a[i]
j = i-1
# 寻找a[i]的合适位置,并将a[i-1]至a[i]新位置的元素依次后移
while j >= 0 and tmp < a[j]:
a[j+1] = a[j]
j = j-1
# 将a[i]放到新位置
a[j+1] = tmp
insertionSort(a)
print(a)
以下是使用PHP语言实现的插入排序代码。程序首先构建一个包含36个随机整数(范围1至999)的数组并打乱顺序,随后通过定义的insertionSort函数执行排序。该函数接收数组引用,遍历从索引1开始的元素,若发现当前元素小于前驱元素,则暂存当前值,向前移动比暂存值大的元素,直至找到合适位置并插入暂存值。
<?php
// 生成待排序数组
$a = [];
for($i=0;$i<36;$i++){
array_push($a,mt_rand(1,999));
}
shuffle($a);
/**
* 插入排序 insertion sort
* @param [type] $a 待排序数组的引用
* @return null
*/
function insertionSort(&$a){
for($i = 1;$i<count($a);$i++){
// 若下标为i的元素小于下标为i-1的元素,则将下标为i的元素放到合适位置
if($a[$i] < $a[$i-1]){
$tmp = $a[$i];
// 寻找a[i]的合适位置,并将a[i-1]至a[i]新位置的元素依次后移
for($j = $i-1; $j>=0 && $tmp<$a[$j];$j--)
$a[$j+1] = $a[$j];
// 将a[i]放到新位置
$a[$j+1] = $tmp;
}
}
}
insertionSort($a);
var_dump($a);
插入排序算法的时间复杂度为O(n2),这意味着在最坏情况下(数组完全逆序),比较和移动操作的次数与元素数量的平方成正比。尽管存在这一复杂度限制,但在处理小规模数据或基本有序的数据时,插入排序表现出较高的效率。
虽然插入排序的时间复杂度为O(n2),但在实际性能表现上,它通常优于冒泡排序和选择排序。这是因为插入排序在遍历过程中,一旦遇到比暂存元素大的元素就停止移动,减少了不必要的比较和交换操作,从而在平均情况下具有更好的执行效率。
以上关于插入排序在Python与PHP中的实现及性能分析即为全部内容。希望这些代码示例和原理解析能为您的开发工作提供参考,也欢迎大家继续支持本站获取更多技术资源。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













