PHP 排序算法之选择排序-php教程

资源魔 11 0
抉择排序 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 排序算法之抉择排序的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!