2

描述

选择最小的元素由左到右依次交换顺序即完成元素由小到大的排序。选择排序重点在于选择最小元素。以下是较为详细的描述:

  1. 首先,把所有的数据循环一遍找到最小的数,然后和第一个数交换位置。
  2. 然后从第二个数起,一直循环到最后一个,找到最小的数和第二个交换。
  3. 如此一直找到最后一个。

选择排序每次循环都能排好一个元素,因此需要交换的次数等于元素个数。选择排序是最容易理解的排序方式,通俗的理解方式就是:在9个碗里放了9个苹果,逐个看一眼找出最小的苹果和第一个碗里的交换一下,然后不再看第一个碗,从第二个碗起,再玩一次,直到所有的碗都玩过。

代码

function selectionSort($needSortData)
{
    $sortDataLength = count($needSortData); //计算出待排序元素数量
    for ($i = 0; $i < $sortDataLength; $i++) //外层遍历每一个待排序元素
    {
        $min = $i; //外层遍历把当前元素设置为最小值
        for ($j = $i + 1; $j < $sortDataLength; $j++) 
        {//然后从下一个元素开始依次和正在遍历的元素比较,此层遍历记为内层遍历
            if ($needSortData[$j] < $needSortData[$min]) {
                //遍历到比此次最小值还小的元素,那么用$min记录以下当前位置
                //然后继续遍历,直到遍历到最后,也就是说$min会记录最小值的位置
                $min = $j; 
            }
        }
        //以下三行是把找到的最小值和正在外层遍历的当前元素交换
        $temp = $needSortData[$i];
        $needSortData[$i] = $needSortData[$min];
        $needSortData[$min] = $temp;
    }
    return $needSortData;
}

$unSortedData = [9, 1, 3, 8, 2, 6, 5, 7, 4];
$result=selectionSort($unSortedData);
print_r($result);

sheld
652 声望33 粉丝

我是什么都不知道啊