>  기사  >  백엔드 개발  >  PHP 정렬 알고리즘 선택 정렬

PHP 정렬 알고리즘 선택 정렬

藏色散人
藏色散人앞으로
2019-12-09 14:32:472805검색

select sorting select sorting

● 선택 정렬도 내부 정렬입니다

● 정렬 아이디어:

처음 숫자를 선택하는 것은 정렬할 배열의 요소를 선택하고 이를 배열의 다른 요소와 비교하는 것입니다. 정렬. 그런 다음 위치를 비교하고 교환하여 최소값 또는 최대값을 얻은 다음 나머지 배열에서 숫자를 선택하여 배열의 나머지 요소와 비교하고 마지막으로 두 번째 최소값 또는 최대값을 가져옵니다. 비유하자면

● 도식:

선택 정렬에는 전체 배열 크기가 있습니다. 각 정렬 라운드는 또 다른 주기입니다. 먼저 현재 배열이 최소 숫자라고 가정한 다음 이를 후속 배열과 비교합니다. 현재 숫자보다 작은 숫자가 있는 경우 최소 숫자를 다시 결정하고 첨자를 얻습니다. 배열의 끝으로 순회할 때 이 라운드의 최소 숫자와 첨자를 가져와 교환합니다

1. 정렬할 배열 [3, 1, 15, 5, 20]이 있다고 가정합니다.

2. 첫 번째 요소가 가장 작은 요소라고 가정하고 3을 나머지 요소와 비교합니다. 1차 정렬 후 가장 작은 요소 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 [&#39;message&#39; => &#39;$arr不是一个数组&#39;];
        }
        $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 [&#39;message&#39; => &#39;$arr不是一个数组&#39;];
        }
        $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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제