选择排序(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;
}
}
}