选择排序:
问题:给定一个无序数组,要求进行排序(从小到大)
思路:1.在数组中找到最大值,并记录最大值的下标maxindex,将最大值与最后一个元素交换,即swap(vec[maxindex],vec[n-1]);
2.待排数组减少一个,继续第一步,循环操作直到排序完毕
主要代码如下(C++):
void selectSort(vector<int>& vec)
{
for(int j=vec.size();j>=0;j--)
{
int maxindex=0;
for(int i=1;i<j;i++)
{
if(vec[maxindex]<vec[i])
{
maxindex=i;
}
}
swap(vec[maxindex],vec[j-1]);
}
}
空间复杂度:O(1)
时间复杂度:
1.平均O(N^2)
2.最优O(N^2)
3.最差O(N^2)
稳定性:不稳定
原因:相等的两个元素,排序后,相对位置会出现变化