选择排序
- 思想:
- 1.设定一个k值初始为0
- 2.从下标k+1起,遍历数组a,找到数组中最小的数的下标j
- 3.交换a[k]和a[j]的值
- 4.k自增1
- 5.重复2~4步骤 直到k值为数组a长度-1
代码如下:
#include<bits/stdc++.h>
using namespace std;
void chooseSort(vector<int> &a){
int k;
for(int i=0;i<a.size()-1;++i){
k=i;
for(int j=i+1;j<a.size();++j)
{
if(a[j]<a[k])k=j;
}
swap(a[k],a[i]);
}
}
int main(){
int a[]={4,7,3,8,2,5,1,2};
vector<int> store(a,a+8);
chooseSort(store);
for(int i=0;i<store.size();++i)
{
cout<<store[i]<<" ";
}
return 0;
}
运行结果: 1 2 2 3 4 5 7 8
- 时间复杂度: 由于每次都要遍历一遍数组找到当前最小的值 ,要执行n次。外部循环k也要执行n-1次,所以时间复杂度为O( n 2 n^2 n2)
- 空间复杂度: 不需要额外内存空间 O(1)
- 稳定性:不稳定 例如数组为{5,6,1,5,2},第一次遍历完后会将第一个5和最后的2进行交换,此时两个5的相对顺序被破坏,因此不稳定。