选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是:首先在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
下面是一个用PHP实现选择排序的示例代码:
php
<?php
function selectionSort(&$array) {
$n = count($array);
for ($i = 0; $i < $n - 1; $i++) {
// 假设当前元素为最小值
$minIndex = $i;
// 在未排序部分寻找最小值
for ($j = $i + 1; $j < $n; $j++) {
if ($array[$j] < $array[$minIndex]) {
$minIndex = $j;
}
}
// 交换当前元素和找到的最小值元素
if ($minIndex != $i) {
$temp = $array[$i];
$array[$i] = $array[$minIndex];
$array[$minIndex] = $temp;
}
}
return $array;
}
// 示例数组
$array = [64, 25, 12, 22, 11];
echo "未排序数组: ";
print_r($array);
// 调用选择排序函数
$sortedArray = selectionSort($array);
echo "已排序数组: ";
print_r($sortedArray);
?>
代码解释:
- 函数定义 :
selectionSort(&$array)
函数接收一个引用参数$array
,这样可以在函数内部直接修改原始数组。 - 外层循环 :
for ($i = 0; $i < $n - 1; $i++)
,这个循环用于确定当前要排序的位置。 - 假设最小值 :
$minIndex = $i
,假设当前位置$i
的元素为最小值。 - 内层循环 :
for ($j = $i + 1; $j < $n; $j++)
,这个循环用于在未排序部分寻找最小值。 - 找到最小值 :如果找到比当前假设最小值还小的元素,则更新
$minIndex
。 - 交换元素 :如果找到的最小值不在当前位置
$i
,则交换这两个元素的位置。 - 返回排序后的数组:函数返回排序后的数组。
输出:
php
未排序数组: Array
(
[0] => 64
[1] => 25
[2] => 12
[3] => 22
[4] => 11
)
已排序数组: Array
(
[0] => 11
[1] => 12
[2] => 22
[3] => 25
[4] => 64
)
这个示例展示了如何使用PHP实现选择排序算法,并成功对数组进行了排序。选择排序的时间复杂度是 O(n2),适用于小规模数据的排序。