/***************
思路:外层循环:从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次交换,相比于同样时间复杂度的直接插入排序交换次数少,
因此更适合于数据记录结构较大的情况。(由于移动大记录的时间开销大,选择排序
可以最少的移动操作节省排序时间)
************************/