PHP排序算法:选择排序
2017-09-28 00:00
405 查看
摘要: 选择排序
最坏时间复杂度:O(n2)
稳定性:不稳定(考虑升序每次选择最大的情况)
选择排序(Selection sort)是一种简单直观的排序算法。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
假设排序的数组如下:
如果有N个元素,就要进行N-1趟的选择。
每一趟,都会在未排序序列选择出最小值,如果该值不是当前趟次的位置,则放到起始位置或放到已排序末尾。
输出:
时间复杂度:
最优时间复杂度: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 )
相关文章推荐
- PHP排序算法系列:直接选择排序
- php实现排序算法第(二)篇 插入排序 选择排序
- PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
- PHP四种基础排序算法--冒泡,直接插入,快速和选择排序
- PHP基础排序算法(二)选择排序
- php-选择排序
- 排序算法--选择排序
- 排序算法总结之直接选择排序
- 用Python实现八大排序算法--直接选择排序
- 排序算法-之选择排序(直接选择排序,堆排序)
- 必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】
- (1)排序算法——选择排序
- 【排序算法总结】选择排序
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
- 排序算法解析——冒泡排序、选择排序、快速排序
- Kata系列之排序算法的选择排序
- [C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序
- 排序算法(快速排序、选择排序、冒泡排序、2分搜索)
- 排序算法 简单选择排序
- 排序算法 之 直接选择排序