原理:
每次选择的数都是整个数组中最小的数,将这个最小的数和当前的数进行交换。
演示:
原来的数: 9 4 10 2 1
循环一次后: 1 4 10 2 9
循环二次后: 1 2 10 4 9
循环三次后: 1 2 4 10 9
循环四次后: 1 2 4 9 10
代码如下:
#include <cstdio>
int main()
{int i[5]= {
9,4,10,3,1};int ans;for(int a = 0; a < 5; a ++){ans=a;for(int b = a+1; b < 5; b ++){if(i[b]<i[ans])ans=b;}if(ans!=a){int t=i[ans];i[ans]=i[a];i[a]=t;}}for(int a = 0;a < 5;a ++)printf("%d ",i[a]);return 0;
}
分析:最好的时候每次交换0次(在升序的数组中),最坏的时候每次交换n-1次(在降序的数组中),因此,总的时间复杂度依然为o(n^2);但是简单选择排序的性能上还是要略优于冒泡排序。