将数组分为已排序和待排序两个区间,每次从无序区中选出最小/最大的元素与无序区的第一个元素(即有序区尾部)交换位置,直到无序区只剩一个元素,排序完成。
分析
时间复杂度最稳定,无论什么时候都为:T(n)=0(n^2)
代码
找最小元素的索引。
class Solution{ public: void swap(int &a,int &b){ int tmp = a; a = b; b = tmp } void selection(int arr[],int len){ for(int i=0;i<len;i++){ min_index = i; for(int j=1;i<len;j++){ if(arr[j]<arr[min_index]) min_index=j; } //找到了最小元素的索引min_index swap(arr[min_index],arr[i]); } } }