php树形选择排序,标梵互动 PHP的选择排序

这三种类型中,简单选择排序、树型选择排序和堆排序是其中最简单的一种,也是最容易理解的一种。

观念。

SelectionSort:SelectionSort是一个简单而直观的排序算法。正如你所想的那样,直接从待排序的数组中选择一个最小(或最大)的数,每次取一个最小的数,然后将数组的次序放到新数组中,直到全部取完。

步。

最小(大)元素位于未排序的序列中,存放在已排序序列的开始位置。

继续从未排序的元素中查找最小(大)元素,然后将其放置到已排序的序列的结尾。

如此等等,直到所有的元素都被排序。

实现

方式一

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值