选择排序:第 i 趟排序过程是在剩余的待排记录中选一个最小(大)的,放在第 i 个位置。
时间复杂度
O
(
n
2
)
O(n^2)
O(n2),耗费在比较记录上,比较次数始终为
n
(
n
−
1
)
/
2
n(n-1)/2
n(n−1)/2,移动次数最小为 0,
最大
3
(
n
−
1
)
3(n-1)
3(n−1),即
n
−
1
n-1
n−1 次交换。
注意:简单选择排序是不稳定的。反例: (101, 102, 9) → (9, 102, 101)。
#include<iostream>
#include <utility> // std::swap
using namespace std;
void SelectionSort (int a[], int n )
{
for ( int i=0; i<n-1; i++ ) {
int k = i;
for ( int j=i+1; j<n; j++)
if ( a[j]<a[k] ) k=j; // 最小记录
if ( k!=i ) swap(a[i],a[k]);
}
}
int main(){
int len=6;
int a[]={24,85,47,53,30,91};
cout<<"original array:"<<endl;
for(int i=0;i<len;i++){
cout<<a[i]<<endl;
}
cout<<endl;
SelectionSort(a,len);
cout<<"selection sort :"<<endl;
for(int i=0;i<len;i++){
cout<<a[i]<<endl;
}
cout<<endl;
return 0;
}