/*************** 思路:外层循环:从0到n-1遍历数组。 对于第i个元素,内层循环:从i+1开始遍历数组找到最小的元素,与i交换。 ****************/ #include <iostream> using namespace std; void SelectSort(int* arr, int n) { int i,j,temp,min_index; for(i=0; i <n-1; i++) { min_index = i; for(j=i+1; j<n; j++) { if(arr[j] < arr[min_index]) min_index = j; } if(i != min_index) { temp = arr[i]; arr[i] = arr[min_index]; arr[min_index] = temp; } } } int main() { int * arr; int n; cout<<"Input the arr length:"<<endl; cin>>n; arr = new int[n]; cout<<"Input the arr elements:"<<endl; for(int i=0;i<n;i++) { cin>>arr[i]; } SelectSort(arr,n); cout<<"The outcome:"<<endl; for(int i=0;i<n;i++) cout<<arr[i]<<endl; return 0; } /************************ 不稳定 时间代价:最大、最小、平均时间代价均为O(n^2)。 空间代价:一个临时记录,O(1)。 总结: 1.由于时间为O(n^2),因此适用于数组n较小的情况。 2.由于整个排序过程最多n-1次交换,相比于同样时间复杂度的直接插入排序交换次数少, 因此更适合于数据记录结构较大的情况。(由于移动大记录的时间开销大,选择排序 可以最少的移动操作节省排序时间) ************************/