选择排序基本思想:一个数组a有n个数据,首先对n个数据进行(n-1)次比较,可得该组数据最大值或最小值,把该值与第一个数据(a[0])交换位置;剩下的数据,按上述方法依次取得最大(小)值,即可获得有序数据。由上可知,共需进行(n-1)趟比较。需要两个辅助空间。比较次数为:n*(n-1)/2
平均情况的时间复杂度 最好情况的时间复杂度 最坏情况的时间复杂度 空间复杂度
O(n^2) O(n^2) O(n^2) O(1)
原数据:18,23,15,3,8
第一趟:3,23,15,18,8
第二趟:3,8,15,18,23
第三趟:3,8,15,18,23
第四趟:3,8,15,18,23
第五趟:3,8,15,18,23
#ifndef _SELECTSORT_H #define _SELECTSORT_H #include<iostream> using namespace std; template<class Type> void SelectSort(Type *a,int n) { Type tem; int flag; for(int i=0;i<n-1;i++) { flag=i; for(int j=i+1;j<n;j++) { if(a[j]<a[flag]) //由小到大排列;若换为>,则为由大到小排列 { flag=j; } } if(flag!=i) { tem=a[flag]; a[flag]=a[i]; a[i]=tem; } for(int i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; } } #endif
测试代码:
#include<iostream> #include"SelectSort.h" using namespace std; int main() { int a[10]={18,23,15,3,8,54,12,54,76,100}; for(int i=0;i<10;i++) cout<<a[i]<<" "; cout<<endl; SelectSort(a,10); for(int i=0;i<10;i++) cout<<a[i]<<" "; cout<<endl; return 0; }