从今天开始努力。
头文件。
#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]); } } }