· 直接选择排序的核心在于在每次遍历过程中找到最大值(或者最小值),外层遍历是为了找到每次遍历的起始位置,在每次遍历结束用于存放每次找到的极值,但是在里层遍历过程中只记录其下标,而后利用交换将最值放置在数组首部或者尾部。
· 选择排序是一种不稳定的排序
时间复杂度
· 选择排序最好的时间复杂度为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; }