PHP简单选择排序(Simple Selection Sort)算法学习

PHP简单选择排序(Simple Selection Sort)算法学习

算法介绍

简单选择排序,也称直接选择排序,是一种简单直观的排序算法,其基本思想是:每次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

选择排序的时间复杂度为 $O(n^2)$,不适用于大规模数据排序。但选择排序的思想被很多高级排序算法所引用,如堆排序和快速排序。

算法演示:

  • 初始状态:[49, 38, 65, 97, 76, 13, 27, 49]
  • 第一趟排序后:[13, 38, 65, 97, 76, 49, 27, 49]
  • 第二趟排序后:[13, 27, 65, 97, 76, 49, 38, 49]
  • 第三趟排序后:[13, 27, 38, 97, 76, 49, 65, 49]
  • 第四趟排序后:[13, 27, 38, 49, 76, 97, 65, 49]
  • 第五趟排序后:[13, 27, 38, 49, 49, 97, 65, 76]
  • 第六趟排序后:[13, 27, 38, 49, 49, 65, 97, 76]
  • 第七趟排序后:[13, 27, 38, 49, 49, 65, 76, 97]

PHP实现

/**
 * 简单选择排序
 *
 * @param array $arr 待排序数组
 * @return array 排序后的数组
 */
function selectionSort(array $arr): array
{
    $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;
}

示例说明

示例1

$arr = [49, 38, 65, 97, 76, 13, 27, 49];
$res = selectionSort($arr);
print_r($res);

输出:

Array
(
    [0] => 13
    [1] => 27
    [2] => 38
    [3] => 49
    [4] => 49
    [5] => 65
    [6] => 76
    [7] => 97
)

示例2

$arr = [1,2,3,4,5];
$res = selectionSort($arr);
print_r($res);

输出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)

以上两个示例分别对一个无序数组和已经排好序的数组进行了简单选择排序。在第一个示例中,我们可以清晰地看到排序的过程,每次选择出最小的元素,并交换位置。在第二个示例中,由于数组已经排好序,所以只需要比较一次即可,算法复杂度为 $O(n)$。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP简单选择排序(Simple Selection Sort)算法学习 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python 数据结构之十大经典排序算法一文通关

    Python 数据结构之十大经典排序算法一文通关 一、前置知识 在学习本文之前,需要具备以下基础知识: Python 基础语法 算法与数据结构基础 二、十大经典排序算法 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序 本文将一一讲解这十种排序算法。 三、冒泡排序 冒泡排序是一种简单的排序算法,它重复地遍历过要排…

    算法与数据结构 2023年5月19日
    00
  • 算法系列15天速成 第一天 七大经典排序【上】

    我会为你详细讲解“算法系列15天速成 第一天 七大经典排序【上】”的完整攻略。 标题 算法系列15天速成 第一天 七大经典排序【上】 内容 本文主要介绍了常用的七大经典排序算法,分别是插入排序、希尔排序、选择排序、冒泡排序、快速排序、归并排序以及堆排序。对每个算法的特点、实现过程和时间复杂度进行了详细的讲解,同时也对每个算法进行了简单的示例说明。 插入排序 …

    算法与数据结构 2023年5月19日
    00
  • 详解js数组的完全随机排列算法

    详解JS数组的完全随机排列算法 1. 算法原理 完全随机排列算法是指将一个数组中的元素完全随机地排列,使每个元素出现在每个位置的可能性相同。 算法的实现原理是: 从数组的最后一个位置开始依次向前遍历,对于每个位置i,随机生成一个介于[0,i]之间的整数j 将位置i上的元素与位置j上的元素交换 经过这样的遍历,整个数组就被完全随机排列了。 2. JS代码实现 …

    算法与数据结构 2023年5月19日
    00
  • c# 冒泡排序算法(Bubble Sort) 附实例代码

    冒泡排序算法(Bubble Sort) 冒泡排序算法是比较简单的排序算法之一,它通过多次比较和交换相邻两个元素的位置,将整个序列逐步变得有序,因此也被称为“泡沫排序”。 算法步骤: 从序列的第一个元素开始,与第二个元素进行比较,如果第一个元素大于第二个元素,则交换这两个元素; 接着再与第三个元素进行比较,如果第二个元素大于第三个元素,则交换这两个元素; 以此…

    算法与数据结构 2023年5月19日
    00
  • C++排序算法之插入排序

    C++排序算法之插入排序 插入排序是一种简单且直观的排序算法,在实现上也比较容易。它的基本思路是把一个待排序的序列分成两个部分:已排序部分和未排序部分,然后从未排序部分取出一个元素插入到已排序部分的合适位置,作为新的已排序部分。 算法过程 插入排序的过程可以用以下步骤概括: 将序列的第一个元素看成已排序部分,其他元素看成未排序部分 从未排序部分选择一个元素,…

    算法与数据结构 2023年5月19日
    00
  • Java 十大排序算法之计数排序刨析

    Java 十大排序算法之计数排序刨析 算法介绍 计数排序是一个时间复杂度为O(n+k)的非基于比较的排序算法,其中n是待排序元素的个数,k是待排序元素的范围,即待排序元素的最大值减去最小值再加1。 算法通过构建一个长度为k的计数数组来统计每个元素出现的次数,然后借助计数数组按顺序输出每个元素,就完成了排序过程。 因为计数排序是非基于比较的算法,因此可以在一定…

    算法与数据结构 2023年5月19日
    00
  • Java语言字典序排序算法解析及代码示例

    Java语言字典序排序算法解析及代码示例 概述 字典序排序是一种常见的字符串排序算法,其可用于字符串编程中的许多场景,例如:搜索引擎中输入提示的联想;电商网站的商品搜索结果排列;信息化项目中的数据对比等。 本文将介绍Java语言中使用字典序排序的方法以及实现代码,并包含两个代码示例以帮助读者更好地理解。 基本思想 字典序排序的基本思想是将需要排序的字符串按照…

    算法与数据结构 2023年5月19日
    00
  • 用C语言实现二分查找算法

    当实现查找某个元素时,一个常见的算法是二分查找(Binary Search),也称作折半查找。二分查找是一种在有序数组中查找某一特定元素的搜索算法,将目标值与数组的中间元素进行比较,如果中间元素大于目标值,则在左半部分继续查找;如果中间元素小于目标值,则在右半部分继续查找。重复以上步骤,直到找到目标值或者确定目标值不存在。 以下是在C语言中实现二分查找的完整…

    算法与数据结构 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部