PHP排序算法之直接插入排序(Straight Insertion Sort)实

1. 插入排序介绍

插入排序是一种简单直观的排序算法,它的基本思想是通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入。直接插入排序是插入排序的一种实现方式,也是最简单的一种。

2. 直接插入排序算法思路

直接插入排序的思路非常简单,具体步骤如下:

2.1 初始化

首先,假设待排序的序列为arr,序列的长度为n。

2.2 从第一个元素开始

将序列的第一个元素视为已排序序列,将第二个元素至第n个元素视为未排序序列。

2.3 插入操作

对于未排序序列中的每一个元素,将其与已排序序列从后往前逐个比较,找到合适的位置插入。

具体操作是,将该元素与已排序序列中的每个元素从后往前进行比较,直到找到一个元素小于或等于该元素,或者已经到达已排序序列的开头位置。然后将该元素插入到该位置的后一个位置上,即将该位置以及其后的元素都后移一位。

function straightInsertionSort($arr) {

$n = count($arr);

for ($i = 1; $i < $n; $i++) {

$temp = $arr[$i];

$j = $i - 1;

while ($j >= 0 && $arr[$j] > $temp) {

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

$j--;

}

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

}

return $arr;

}

2.4 重复步骤2.3

重复步骤2.3,直到将未排序序列中的所有元素都插入到已排序序列中。

2.5 完成排序

排序结束后,已排序序列中的元素就是原始序列按照从小到大的顺序排列。

3. 算法示例

以下是对序列 [8, 5, 3, 1, 9] 进行直接插入排序的示例:

$arr = [8, 5, 3, 1, 9];

$result = straightInsertionSort($arr);

print_r($result);

输出结果为:

Array

(

[0] => 1

[1] => 3

[2] => 5

[3] => 8

[4] => 9

)

4. 算法分析

直接插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。尽管直接插入排序的时间复杂度较高,但是由于其简单的实现和不占用额外的空间,对于小规模的数据排序是非常合适的。

此外,直接插入排序是稳定的排序算法,即排序前后相等元素的相对顺序保持不变。

5. 总结

直接插入排序是一种简单而实用的排序算法,它适用于小规模的数据排序,同时具有稳定性和原地排序的特点。通过不断将未排序序列中的元素插入到已排序序列中的合适位置,最终达到整个序列有序的效果。

在实际开发中,当需要对规模较小的数据进行排序时,直接插入排序是一个简单而有效的选择,它的实现逻辑清晰,代码量较少,易于理解和调试。

后端开发标签