选择排序(select sort):每一趟在n-i+1个记录中选择关键字最小的记录作为序列中的第i个记录。
必须有记录:33 21 45 67 15 24
第一趟结果:15 21 45 67 33 24 //第一趟,选择出最小的数15将第一个数33和15交换位置
第二趟结果:15 21 45 67 33 24 //第二趟,由于最小的数就是21本身,不用改变位置,下面的以此类推
第三趟结果:15 21 24 67 33 45
第四趟结果:15 21 24 33 67 45
第五趟结果:15 21 24 33 45 67
选择排序的实际复杂度为O(n^2)
C++实现代码:
//选择排序 gavin 2012-3-25
void mySelectSort ( int * arr , int len )
{
for ( int i = 0; i < len - 1; i ++) //扫描的次数
{
int mmin = arr [i ]; //初始化当前选择的最小值
int mminloc = i ; //初始化当前最小值的位子
for ( int j =i + 1; j < len ;j ++) //循环查找从i到len-1的记录中最小的一个,以及最小值的位子
{
if (arr [j ] < mmin )
{
mmin = arr [j ];
mminloc = j ;
}
}
if (mminloc != i )
{
int temp = arr [i ];
arr [i ] = arr [mminloc ];
arr [mminloc ] = temp ;
}
}
}
void mySelectSort ( int * arr , int len )
{
for ( int i = 0; i < len - 1; i ++) //扫描的次数
{
int mmin = arr [i ]; //初始化当前选择的最小值
int mminloc = i ; //初始化当前最小值的位子
for ( int j =i + 1; j < len ;j ++) //循环查找从i到len-1的记录中最小的一个,以及最小值的位子
{
if (arr [j ] < mmin )
{
mmin = arr [j ];
mminloc = j ;
}
}
if (mminloc != i )
{
int temp = arr [i ];
arr [i ] = arr [mminloc ];
arr [mminloc ] = temp ;
}
}
}