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日

相关文章

  • 手把手教你搞懂冒泡排序和选择排序

    手把手教你搞懂冒泡排序和选择排序 冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换的数据为止。 算法流程 比较相邻的元素。如果当前的元素大于下一个元素,则交换它们的位置。 对每一对相邻元素都执行步骤 1,从开始第一对到…

    算法与数据结构 2023年5月19日
    00
  • C/C++实现快速排序(两种方式)图文详解

    C/C++实现快速排序(两种方式)图文详解 什么是快速排序 快速排序是一种基于分治策略的排序算法,由C.A.R.Hoare在1962年发明。快速排序的基本思路是:在待排序序列中选择一个元素作为“基准”(pivot),将序列分成两个部分,所有比“基准”小的元素放在一边,所有比“基准”大的元素放在另一边。如此递归下去直到序列有序。 算法流程 快速排序的流程可以简…

    算法与数据结构 2023年5月19日
    00
  • JavaScript数组排序的六种常见算法总结

    JavaScript数组排序的六种常见算法总结 一、排序算法简介 排序算法是计算机学科中最基本的算法之一,也是编程中必须要了解的重要内容。在JavaScript编程中,排序算法的应用非常广泛,尤其是在处理和展现数据方面。 二、排序算法分类 根据不同的排序方式和算法思想, 排序算法可以被分类为以下六类。 冒泡排序 选择排序 插入排序 快速排序 归并排序 希尔排…

    算法与数据结构 2023年5月19日
    00
  • JavaScript实现经典排序算法之冒泡排序

    JavaScript实现经典排序算法之冒泡排序 什么是冒泡排序? 冒泡排序是一种简单的排序算法,从序列左侧开始比较两个相邻的元素,如果顺序不对就交换位置,直到序列末尾,这样一次遍历后,序列最后一个元素就是当前序列最大值。然后对剩余序列重复上述过程,直到整个序列有序。 算法实现 我们来看看如何用JavaScript实现冒泡排序。 function bubble…

    算法与数据结构 2023年5月19日
    00
  • C语言直接选择排序算法详解

    C语言直接选择排序算法详解 什么是选择排序算法 选择排序算法(Selection Sort)是一种简单直观的排序算法。该算法每次从未排序的数中选择最小(或最大)的一个数,将其放在已排序数列的末尾,直到所有数排序完成。因为该算法在每次排序后的下一轮排序不会再考虑之前选择的最小(或最大)值,所以属于不稳定排序算法。 算法流程 选择排序算法主要分为两个步骤: 在未…

    算法与数据结构 2023年5月19日
    00
  • C语言超详细讲解排序算法上篇

    C语言超详细讲解排序算法上篇 简介 本文将介绍排序算法的基础知识和常见排序算法,包括冒泡排序、选择排序、插入排序。 排序算法是计算机科学中非常重要的算法之一,在实际开发中也经常用到。了解各种排序算法的特点和优缺点,可以帮助我们更好地应对实际问题。 基础知识 在介绍排序算法之前,有一些基础知识需要了解。 1. 时间复杂度 时间复杂度用来衡量一个算法所需要的计算…

    算法与数据结构 2023年5月19日
    00
  • 详解Bucket Sort桶排序算法及C++代码实现示例

    接下来我会详细讲解“详解Bucket Sort桶排序算法及C++代码实现示例”的完整攻略。 什么是桶排序算法? 目前,排序算法很多,常用的有冒泡排序、选择排序、插入排序、快速排序、归并排序等等算法。其中,桶排序(Bucket Sort)是比较特殊的一种排序方法。顾名思义,桶排序就是把数据分到不同的桶里,然后对每个桶里的数据进行排序。支持桶排序的数据类型必须是…

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

    首先要了解什么是插入排序,插入排序是排序算法中简单直观的一种,其原理是将未排序的元素一个一个插入到已经排好序的元素中,最终得到一个有序的序列。那么下面我将用Java代码来演示插入排序的实现过程,并且提供详细的注释帮助读者理解。 算法步骤 从第一个元素开始,认为第一个元素是已经排好序的,取第二个元素和已排序的元素进行比较,如果第二个元素比已排序的元素小,则交换…

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