PHP 算法01之选择排序

描述

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

  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);
相关文章
相关标签/搜索