struct person st[MAX];
int n=0;
/**
* @brief
* 选择排序:
* 假定数组中存在一个分界值,
* 分界值前面的为已排序部分,分界值后面为未排序部分(最初已排序部分为0个,所以第0个数据就是分界值)。
* 选择排序外层循环进行n-1次,每次选出未排序部分的最小值来与分界值交换。
* 这样当前的分界值就加入到“已排序部分”,分界值位置向后移动一个。
* 当分界值到达n-1时,排序完成。
* @param 无
* 无参数;
* 隐含入参:全局变量struct person数组st
* 隐含入参:全局变量n,表示数组st中数据的个数
* @return void
*/
void sort()
{
struct person temp; /* 用于交换的临时变量 */
int i,j,k; /* i,j为循环变量,k用于记录未排序部分和分界值的最小值的下标 */
/* 以下的“最小值”均指“未排序部分和分界值”中的最小值 */
for(i=0;i<n-1;i++) /* 外层循环n-1次,i就是分界值下标; 找到新的最小值之后,i++,表示分界值后移 */
{
k=i; /* k为最小值下标,默认分界值最小 */
for(j=i+1;j<n;j++)/* 对所有未排序部分进行查找 */
if(st[k].no>st[j].no) /* 如果有比当前最小值更小的,就把k改为那个更小值的下标 */
k=j;
if(k!=i) /* 如果k==i,表示分界值就是最小值,则不用交换;k!=i则需要交换 */
{
/* 这里进行交换(分界值与最小值) */
temp=st[k];
st[k]=st[i];
st[i]=temp;
}
}
}
温馨提示:答案为网友推荐,仅供参考