标梵互动
标梵互动
  • 发布:2020-11-19 14:03
  • 更新:2020-11-19 14:03
  • 阅读:593

标梵互动 PHP的选择排序

分类:ASK社区
PHP

这三种类型中,简单选择排序、树型选择排序和堆排序是其中最简单的一种,也是最容易理解的一种。
观念。
SelectionSort:SelectionSort是一个简单而直观的排序算法。正如你所想的那样,直接从待排序的数组中选择一个最小(或最大)的数,每次取一个最小的数,然后将数组的次序放到新数组中,直到全部取完。
步。
最小(大)元素位于未排序的序列中,存放在已排序序列的开始位置。
继续从未排序的元素中查找最小(大)元素,然后将其放置到已排序的序列的结尾。
如此等等,直到所有的元素都被排序。

实现
方式一

<?php

class SelectionSort
{
/**

  • 主运行方法
  • @return void
    */
    public static function main(): void
    {
    $random = self::random();
    $array = self::sort($random);
    print_r($array);
    }
    /**
  • 选择排序
  • @param array $array
  • @return array
    */
    public static function sort(array &$array): array
    {
    $count = count($array);
    for ($i = 0; $i < $count; $i++) {
    $position = $i;
    for ($j = $i + 1; $j < $count; $j++) {
    if (self::compare($array[$position], $array[$j]) > 0) {
    $position = $j;
    }
    }

        if ($position !== $i) {  
            self::swap($array[$position], $array[$i]);  
        }  
    }  
    
    return $array;  

    }

    /**

  • 比较大小
  • @param int $x
  • @param int $y
  • @return int
    */
    private static function compare(int $x, int $y): int
    {
    return $x <=> $y;
    }

    /**

  • 互换位置
  • @param int $x
  • @param int $y
  • @return void
    */
    private static function swap(int &$x, int &$y): void
    {
    if ($x !== $y) {
    $t = $x;
    $x = $y;
    $y = $t;
    }
    }

    /**

  • 生成随机数组
  • @param int $low
  • @param int $high
  • @param int $num
  • @return array
    */
    private static function random(int $low = 1, int $high = 9999, int $num = 10): array
    {
    $num = $num > $high ? $high : $num;
    $range = range($low, $high);
    $array = array_rand(array_flip($range), $num);
    shuffle($array);

    return $array;  

    }
    }

SelectionSort::main();

// 结果
Array
(
[0] => 312
[1] => 1124
[2] => 1267
[3] => 1884
[4] => 2609
[5] => 4177
[6] => 4773
[7] => 7728
[8] => 8237
[9] => 8963
)
方式二
树形选择排序 - Tree Selection Sort:又名锦标赛排序,是一种按照锦标赛的思想进行选择排序的方法

方式三
堆排序 - Heap Sort:是指利用堆这种数据结构所设计的一种排序算法。它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶

本文来源:标梵互动(https://www.biaofun.com/)

0 关注 分享

要回复文章请先登录注册