php选择排序

2025-04-14 12

Image

php选择排序

解决方案

在PHP中实现选择排序,可以通过遍历数组找到最小值或值并将其放置到正确的位置来完成。选择排序是一种简单直观的比较排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

基本的选择排序思路

选择排序的核心思想是将数组分为已排序和未排序两个部分。初始时已排序部分为空,未排序部分为整个数组。算法通过不断从未排序部分中找到最小(或)元素,并将其放到已排序部分的末尾,从而逐步缩小未排序部分的范围,直至完成整个数组的排序。

基本代码实现

php
<?php
function selectionSort($arr) {
    $len = count($arr);
    for ($i = 0; $i < $len - 1; $i++) {
        // 设定个未排序元素为最小
        $minIndex = $i;
        // 遍历剩余的元素寻找真正的最小值
        for ($j = $i + 1; $j < $len; $j++) {
            if ($arr[$j] < $arr[$minIndex]) {
                $minIndex = $j;
            }
        }
        // 如果发现更小的元素,则交换
        if ($minIndex != $i) {
            $temp = $arr[$i];
            $arr[$i] = $arr[$minIndex];
            $arr[$minIndex] = $temp;
        }
    }
    return $arr;
}</p>

<p>// 示例使用
$arr = [64, 25, 12, 22, 11];
$sortedArr = selectionSort($arr);
print_r($sortedArr);
?>

优化的选择排序思路

虽然选择排序的时间复杂度始终为O(n^2),但我们可以通过减少不必要的交换操作来提高效率。例如,在每次内层循环结束后再进行一次交换,而不是在每次找到更小元素时就立即交换。

优化代码实现

php
<?php
function optimizedSelectionSort($arr) {
    $len = count($arr);
    for ($i = 0; $i < $len - 1; $i++) {
        $minIndex = $i;
        for ($j = $i + 1; $j < $len; $j++) {
            if ($arr[$j] < $arr[$minIndex]) {
                $minIndex = $j;
            }
        }
        // 只在确定最小值后进行一次交换
        if ($minIndex != $i) {
            $temp = $arr[$i];
            $arr[$i] = $arr[$minIndex];
            $arr[$minIndex] = $temp;
        }
    }
    return $arr;
}</p>

<p>// 示例使用
$arr = [64, 25, 12, 22, 11];
$sortedArr = optimizedSelectionSort($arr);
print_r($sortedArr);
?>

双向选择排序思路

双向选择排序是在每一轮迭代中同时找到当前未排序部分的值和最小值,并将它们分别放置到两端。这种方法可以减少一半的迭代次数,但实际性能提升有限。

双向代码实现

php
<?php
function bidirectionalSelectionSort($arr) {
    $left = 0;
    $right = count($arr) - 1;</p>

<pre><code>while ($left < $right) {
    $minIndex = $left;
    $maxIndex = $left;

    for ($i = $left; $i <= $right; $i++) {
        if ($arr[$i] < $arr[$minIndex]) {
            $minIndex = $i;
        }
        if ($arr[$i] > $arr[$maxIndex]) {
            $maxIndex = $i;
        }
    }

    // 交换最小值到左边
    if ($minIndex != $left) {
        $temp = $arr[$left];
        $arr[$left] = $arr[$minIndex];
        $arr[$minIndex] = $temp;
    }

    // 如果值原来的位置被换成了最小值,则需要更新值索引
    if ($arr[$maxIndex] == $arr[$left]) {
        $maxIndex = $minIndex;
    }

    // 交换值到右边
    if ($maxIndex != $right) {
        $temp = $arr[$right];
        $arr[$right] = $arr[$maxIndex];
        $arr[$maxIndex] = $temp;
    }

    $left++;
    $right--;
}

return $arr;

}

// 示例使用
$arr = [64, 25, 12, 22, 11];
$sortedArr = bidirectionalSelectionSort($arr);
print_r($sortedArr);
?>

以上几种不同的选择排序方法及其在PHP中的实现。根据具体需求和数据特点,可以选择最适合的排序方式。

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

源码下载