当前位置: 代码迷 >> 综合 >> 简单选择排序(Eternallyc)
  详细解决方案

简单选择排序(Eternallyc)

热度:88   发布时间:2023-12-26 00:58:30.0

原理
每次选择的数都是整个数组中最小的数,将这个最小的数和当前的数进行交换。

演示:
原来的数: 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);但是简单选择排序的性能上还是要略优于冒泡排序。