选择排序很类似插入排序,也会见数组分为已排序区域和未排序区域。它和插入排序的区别是:选择排序每次会将未排序区域中的最小元素插入已排序区域的末尾。
假定有一个n个元素的无序数组(初始化 i = 0):
时间复杂度的分析依旧从三个层面分析:最好、最坏和平均。
下面展示C++的实现源码:
void SortFuncation::SelectSort(QVector _vec)
{if(_vec.length() <= 1){return ;}QTime _beginTime = QTime::currentTime();qDebug()<int _iMin = i;for(int j = i;j < _iLen;j ++){if(_vec.at(_iMin) > _vec.at(j)){_iMin = j;}}/* 将未排序区域的最小元素插入已排序区域的末尾 */int _iTemp = _vec.at(i);_vec[i] = _vec[_iMin];_vec[_iMin] = _iTemp;}QTime _endTime = QTime::currentTime();qDebug()<
到这里,我们针对平均时间复杂度为O(n^2)的排序算法的学习已经结束了,下面浅浅做一些总结:
算法名称 | 是否为原地排序 | 是否为稳定排序 | 最好的时间复杂度 | 最坏的时间复杂度 | 平均的时间复杂度 |
---|---|---|---|---|---|
冒泡排序 | 是 | 是 | O(n) | O(n^2) | O(n^2) |
插入排序 | 是 | 是 | O(n) | O(n^2) | O(n^2) |
选择排序 | 是 | 否 | O(n^2) | O(n^2) | O(n^2) |
欧克,今天的学习就到这,下期我们学习归并排序:)
上一篇:基于 Zynq+AD+DA 的振动台控制器测试与验证(四)
下一篇:时钟、晶振概念