当前位置:首页 > PHP教程 > 正文内容

PHP 排序算法之挑选排序【php教程】,PHP

搜教程4年前 (2019-12-10)PHP教程150
挑选排序 select sorting

● 挑选排序也是内部排序

● 排序头脑:

第一次先随意挑选一个数,就是在要排序的数组中挑选一个元素和数组的别的元素比较。然后比较交流位置获得最小值或许最大值,然后再次在剩下的数组中,挑选一个数和数组剩下的元素比较,末了获得第二个最小或最大的元素。顺次类推

● 示意图:

挑选排序一共有数组大小 - 1 轮排序;每一轮排序又是一个轮回;先假定当前的这个数组就是最小数,然后和背面的元素顺次比较,假如发明有比当前数更小的数,就从新肯定最小数,并获得下标,当遍历到数组的末了时,就获得本轮最小数和下标,交流

1. 假定有一个待排序的数组 [3, 1, 15, 5, 20]

2. 随机挑选一个元素,假定第一个就是最小的元素,拿 3 和数组剩下的元素比较,第一轮排序后获得最小元素 1

<?php
$arr = [3, 1, 15, 5, 20];
$count = count($arr);
//假定最小的元素就是第一个元素
$minIndex = 0;
$min = $arr[0];
for ($j = $minIndex + 1; $j < $count; $j++) {
    if ($min > $arr[$j]) { //假定的最小值大于背面的值,重置最小值
        $min = $arr[$j];
        $minIndex = $j;
    }
}
$arr[$minIndex] = $arr[0];
$arr[0] = $min;

3. 再次挑选一个假定最小值,与背面的元素一次比较,获得第二个最小值

<?php
$arr = [1, 3, 15, 5, 20];
$count = count($arr);
//假定最小的元素就是第二个元素
$minIndex = 1;//假定的最小元素的下表
$min = $arr[1];//假定最小元素的值
for ($j = $minIndex + 1; $j < $count; $j++) {
    if ($min > $arr[$j]) { //假定的最小值大于背面的值,重置最小值
        $min = $arr[$j];
        $minIndex = $j;
    }
}
if ($minIndex != 1) {
    $arr[$minIndex] = $arr[1];//假定的最小元素不是最小元素,那末把背面的最小元素和假定的最小元素做交流
    $arr[1] = $min;//元素下标交流
}

4. 以此类推,就能够运用两重 for 轮回,获得挑选排序的算法以下:

  public static function sortSelect(array $arr) :array
    {
        if (!is_array($arr)) {
            return ['message' => '$arr不是一个数组'];
        }
        $count = count($arr);
        if ($count <= 1) {
            return $arr;
        }
        for ($i = 0; $i < $count; $i++) {
            $minIndex = $i;
            $min = $arr[$i];
            for ($j = $i + 1; $j < $count; $j++) {
                if ($min > $arr[$j]) {//挑选的假定最小元素大于背面的元素
                    $min = $arr[$j];//把背面的最小元素赋值给假定的最小元素
                    $minIndex = $j;//把背面最小元素的坐标赋值给假定的最小元素
                }
            }
            if ($minIndex != $i) {//假如在这个位置,一开始的假定最小元素的坐标被替换了,申明假定最小元素不是最小元素,那末发作交流
                $arr[$minIndex] = $arr[$i];//交流最小元素,把最小元素和假定元素做交流
                $arr[$i] = $min;
            }
        }
        return $arr;
    }

● 完全代码以下:

<?php
class SelectSort
{
    public static function select(array $arr):array
    {
        $count = count($arr);
        //假定最小的元素就是第二个元素
        $minIndex = 0;//假定的最小元素的下表
        $min = $arr[0];//假定最小元素的值
        for ($j = $minIndex + 1; $j < $count; $j++) {
            if ($min > $arr[$j]) { //假定的最小值大于背面的值,重置最小值
                $min = $arr[$j];
                $minIndex = $j;
            }
        }
        if ($minIndex != 0) {
            $arr[$minIndex] = $arr[0];//假定的最小元素不是最小元素,那末把背面的最小元素和假定的最小元素做交流
            $arr[0] = $min;//元素下标交流
        }
        var_dump($arr);
        $minIndex = 1;//假定的最小元素的下表
        $min = $arr[1];//假定最小元素的值
        for ($j = $minIndex + 1; $j < $count; $j++) {
            if ($min > $arr[$j]) { //假定的最小值大于背面的值,重置最小值
                $min = $arr[$j];
                $minIndex = $j;
            }
        }
        if ($minIndex != 1) {
            $arr[$minIndex] = $arr[1];//假定的最小元素不是最小元素,那末把背面的最小元素和假定的最小元素做交流
            $arr[1] = $min;//元素下标交流
        }
        var_dump($arr);
        $minIndex = 2;//假定的最小元素的下表
        $min = $arr[2];//假定最小元素的值
        for ($j = $minIndex + 1; $j < $count; $j++) {
            if ($min > $arr[$j]) { //假定的最小值大于背面的值,重置最小值
                $min = $arr[$j];
                $minIndex = $j;
            }
        }
        if ($minIndex != 2) {
            $arr[$minIndex] = $arr[2];//假定的最小元素不是最小元素,那末把背面的最小元素和假定的最小元素做交流
            $arr[2] = $min;//元素下标交流
        }
        var_dump($arr);
        return $arr;
    }
    public static function sortSelect(array $arr) :array
    {
        if (!is_array($arr)) {
            return ['message' => '$arr不是一个数组'];
        }
        $count = count($arr);
        if ($count <= 1) {
            return $arr;
        }
        for ($i = 0; $i < $count - 1; $i++) {
            $minIndex = $i;
            $min = $arr[$i];
            for ($j = $i + 1; $j < $count; $j++) {
                if ($min > $arr[$j]) {//挑选的假定最小元素大于背面的元素
                    $min = $arr[$j];//把背面的最小元素赋值给假定的最小元素
                    $minIndex = $j;//把背面最小元素的坐标赋值给假定的最小元素
                }
            }
            if ($minIndex != $i) {//假如在这个位置,一开始的假定最小元素的坐标被替换了,申明假定最小元素不是最小元素,那末发作交流
                $arr[$minIndex] = $arr[$i];//交流最小元素,把最小元素和假定元素做交流
                $arr[$i] = $min;
            }
        }
        return $arr;
    }
}
$arr = [3, 1, 15, 5, 20];
var_dump(SelectSort::sortSelect($arr));

以上就是PHP 排序算法之挑选排序的细致内容,更多请关注ki4网别的相干文章!

扫描二维码推送至手机访问。

版权声明:本文由搜教程网发布,如需转载请注明出处。

本文链接:https://www.sojiaocheng.cn/16565.html

标签: PHP
分享给朋友:

“PHP 排序算法之挑选排序【php教程】,PHP” 的相关文章

PHP中bindParam和bindValue的区分【php教程】,php,bindParam,bindValue

PHP中bindParam和bindValue的区分【php教程】,php,bindParam,bindValue

PDOStatement :: bindParam()函数是PHP中的内置函数,用于将参数绑定到指定的变量名。此函数绑定变量,将其值作为输入通报,并吸收其相干参数标记的输出值(如果有)。 语法: bool PDOStatement::bindParam ( $parameter, $vari...

关于Laravel重定向的七种要领详解【php教程】,Laravel,redirect()

关于Laravel重定向的七种要领详解【php教程】,Laravel,redirect()

在本篇文章中,我将给人人引见怎样从controller控制器中将用户从一个页面重定向到另一个页面。我们通常会运用redirect()要领来重定向控制器中的用户。 Laravel 5版本供应了redirect(),那末我们能够在Laravel 5.0、Laravel 5.1、Laravel...

PHP完成耐烦排序(patience sort)算法【php教程】,PHP,耐心排序,patience sort,算法

PHP完成耐烦排序(patience sort)算法【php教程】,PHP,耐心排序,patience sort,算法

耐烦排序(patience sort)是一种排序算法,灵感来源于纸牌游戏patience,并以此定名。该算法的一个变体能够有效地盘算给定数组中最长递增子序列的长度。 该算法的名字来源于一个简化版的patience纸牌游戏。这个游戏以一副洗牌最先。根据下面的划定规矩,这些卡片被一个接一个地摞...

黑马程序员怎样?究竟好不好?【php教程】,黑马程序员

黑马程序员怎样?究竟好不好?【php教程】,黑马程序员

黑马程序员培训如何?许多想要去黑马程序员进修的朋侪都邑有如许一个斟酌,所以本篇文章我们就来看一下网上有哪些对黑马程序员的评价,来看一下黑马程序员的课程终究如何?好不好? 黑马程序员是如何的一家培训机构? 依据百度百科我们可以晓得:黑马程序员是由传智播客团结中关村软件园、CSDN,并托付传...

php下载长途文件的源码引见【php教程】,php

本篇文章给人人带来的内容是关于php下载长途文件的源码引见,有肯定的参考价值,有须要的朋侪能够参考一下,愿望对你有所协助。 近来碰到下载pdf花样的文件存在题目 下载后看不了另有下载不了的题目 大抵思绪是将文件先从长途下载后 再读取下载到用户当地电脑 再将文件删除 不多说了 直接贴源码 长途...

如安在Debian10上装置PHP【php教程】,PHP

如安在Debian10上装置PHP【php教程】,PHP

php 7.3是可用于装置的稳固版本。本篇文章将引见关于在Debian体系上装置最新版本的PHP,根据本文能够在Debian10上装置PHP。 首要条件 运用shell接见权限登录Debian10体系,关于长途体系,运用SSH衔接。Windows用户能够运用Putty或其他替换应用程...