PHP 정렬 알고리즘 선택 정렬

藏色散人
풀어 주다: 2023-04-07 22:56:01
앞으로
2878명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿