· 直接选择排序的核心在于在每次遍历过程中找到最大值(或者最小值),外层遍历是为了找到每次遍历的起始位置,在每次遍历结束用于存放每次找到的极值,但是在里层遍历过程中只记录其下标,而后利用交换将最值放置在数组首部或者尾部。
· 选择排序是一种不稳定的排序
时间复杂度
· 选择排序最好的时间复杂度为O(n^2)
· 选择排序的最坏时间复杂度为O(n^2)
· 因此选择排序总的平均时间复杂度为O(n^2)
#include<iostream>
#include<string>
using namespace std;
int main(){
int n,a,temp,e,b[50];
cin>>n;
for(int k=0;k<n;k++){
cin>>b[k];
}
for(int i=0;i<n-1;i++){
a=i; //每次拿到要比较元素的初始下标
for(int j=i+1;j<n;j++){
if(b[a]<b[j])
a=j; //如果比较中遇到更大(更小)的元素,则记录下标
} //遍历完成之后,a存放的就是每次遍历的极值下标
if(a!=i){ //只有每次起始位置i上的元素不是要找的那个极值a上的元素才进行交换(如果起始位置就是极值就用不着交换了)
temp=b[i];
b[i]=b[a];
b[a]=temp;
}
}
for(int r=0;r<n;r++){
cout<<b[r];
}
return 0;
}