基本思想:
第一趟排序时从待排序的n个记录中选择出关键字最小(大)的记录,将其与第一个记录交换;第二趟,从第二个记录开始的n-1个记录中选择出关键字最小(大)的记录,将其与第而个记录交换;如此下去,通过n-1趟操作,整个数据表就排列有序。
#include <stdio.h>
#define NUM 11
typedef struct
{
int key;
}datatype;
void select_sort(datatype R[],int n)
{
int i,j,k;
for(i = 1; i < n; i++)
{
k = i;
for(j = i + 1; j < n; j++)
{
if(R[j].key < R[k].key)
k = j;
}
if(i != k)
{
R[0] = R[k];
R[k] = R[i];
R[i] = R[0];
}
}
}
void main()
{
datatype data[NUM];
int t;
for(int i = 1; i < NUM; i++)
{
scanf("%d",&data[i].key);
}
select_sort(data,NUM);
for(i = 1; i < NUM; i++)
{
printf("%d ",data[i].key);
}
}
算法分析
稳定性:不稳定的
时间复杂度:O(n²);
与初始状态无关
趟数为n-1趟