您的位置:首页 > 编程语言 > PHP开发

PHP排序算法:选择排序

2017-09-28 00:00 405 查看
摘要: 选择排序

时间复杂度:

最优时间复杂度:O(n2)

最坏时间复杂度:O(n2)

稳定性:不稳定(考虑升序每次选择最大的情况)

原理与实现:



选择排序(Selection sort)是一种简单直观的排序算法。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

假设排序的数组如下:

$arr = [54, 226, 93, 17, 77, 31, 44, 55, 20];
$length = count($arr);

如果有N个元素,就要进行N-1趟的选择。

//下标从0开始,所以进行n-1趟
for($i = 0,$len = $length - 1; $i < $len; $i++){

}

每一趟,都会在未排序序列选择出最小值,如果该值不是当前趟次的位置,则放到起始位置或放到已排序末尾。

$arr = [54, 226, 93, 17, 77, 31, 44, 55, 20];
$length = count($arr);

//n-1趟
for($i = 0,$len = $length - 1; $i < $len; $i++){
//假设未排序的当前趟次位置为最小值,并记录下标
$minIndex = $i;
//从当前趟往后选择出最小值,当前趟次往后应为i+1
for($j = $i + 1; $j < $length; $j++){
if($arr[$j] < $arr[$minIndex]){
$minIndex = $j;
}
}
//选择出最小值后,如果元素没在正确位置,则交换
if($i != $minIndex){
$temp = $arr[$i];
$arr[$i] = $arr[$minIndex];
$arr[$minIndex] = $temp;
}
}

echo '<pre>';
print_r($arr);
echo '</pre>';

输出:

Array
(
[0] => 17
[1] => 20
[2] => 31
[3] => 44
[4] => 54
[5] => 55
[6] => 77
[7] => 93
[8] => 226
)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息