选择排序的基本概念
每一次遍历的同时找出列表中最小的然后和第一个位置交换位置
如图所示
时间复杂度
o(n^2);是一个不常用的一个排序,因为效率比较低;
代码实现
void selectorder(vector<int> &v)
{
int begin = 0;
int end = v.size()-1;
while(begin<end)
{
int maxi = begin;
int mini = begin;
for (int i=begin;i<=end;i++)
{
if (v[mini] > v[i])
mini = i;
if (v[maxi] < v[i])
maxi = i;
}
Swap(v[begin],v[mini]);
if (begin == maxi)
maxi = mini;
Swap(v[end], v[maxi]);
--end;
++begin;
}
}
我这里显示的时一个选择排序的优化,就是在查找出最小值的下标的同时,也找出最大值的下标。
在这里会发现代码运行出来的排序是由问题的。
就是当我们考虑到最大值的下标和begin的位置是相同的 这是maxi的位置就会杯换到最小值的下标,这样我们就要把最大值的下标转移到mini上。
不然的花程序就会出错。