从今天开始努力。
头文件。
#define MAXSIZE 20 /* 一个用作示例的小顺序表的最大长度 */
typedef int KeyType; /* 定义关键字类型为整型 */
typedef struct
{
KeyType key; /* 关键字项 */
InfoType otherinfo; /* 其它数据项,具体类型在主程中定义 */
} RedType; /* 记录类型 */
typedef struct
{
RedType r[MAXSIZE+1]; /* r[0]闲置或用作哨兵单元 */
int length; /* 顺序表长度 */
} SqList; /* 顺序表类型 */
返回最小值的函数
int SelectMinKey(SqList L,int i)
{ /* 返回在L.r[i..L.length]中key最小的记录的序号 */
KeyType min;
int j,k;
k=i; /* 设第i个为最小 */
min=L.r[i].key;
for(j=i+1;j<=L.length;j++)
if(L.r[j].key<min) /* 找到更小的 */
{
k=j;
min=L.r[j].key;
}
return k;
}
简单选择排序
void SelectSort(SqList *L)
{ /* 对顺序表L作简单选择排序。*/
int i,j;
RedType t;
for(i=1;i<(*L).length;++i)
{ /* 选择第i小的记录,并交换到位 */
j=SelectMinKey(*L,i); /* 在L.r[i..L.length]中选择key最小的记录 */
if(i!=j)
{ /* 与第i个记录交换 */
t=(*L).r[i];
(*L).r[i]=(*L).r[j];
(*L).r[j]=t;
}
}
}
更简单的用代码表示为
void selectsort()
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(x[j]<x[i]) swap(x[j],x[i]);
}
}
}