#include
#include
#include
typedef int KeyType;
typedef struct{
KeyType key;
}ElemType;
#define EQ(a,b) ((a)==(b))
#define LT(a,b) ((a)< (b))
#define LQ(a,b) ((a)<=(b))
int nu; /*全局变量,初始时要输入的个数*/
typedef struct {
ElemType *elem;
int length;
}SSTable;
int Init(SSTable *L)/*创建空链表*/
{
L->elem=(ElemType *)malloc((nu+1)*sizeof(ElemType));
if(!L->elem) exit(0);
L->length=0;
return 1;
}
int ListInsert(SSTable *L,int i,ElemType e)/*创建链表*/
{ if (i<1||i>L->length+1) return 0;
L->elem[i]=e;
++L->length;
return 1;
}
int DestoyList(SSTable *L)
{ free(L->elem);
free(L);
return 1;
}
int Search_Seq(SSTable ST,KeyType key)/*顺序查找*/
{ int i;
ST.elem[0].key=key;
for(i=ST.length; !EQ(ST.elem[i].key,key); --i);
return i;
}
int Search_Bin(SSTable ST,KeyType key)/*折半查找*/
{
int low,mid,high;
low=1;high=ST.length;
while(low<=high){
mid=(low+high)/2;
if EQ(key,ST.elem[mid].key) return mid;
else if LT(key,ST.elem[mid].key) high=mid-1;
else low=mid+1;
}
}
/* *****************选择排序**********************/
int SelectMinKey(SSTable L,int i)
{
int k;
int j;
k=i;
for(j=i;j
k=j;
return k;
}
void SelectSort(SSTable *L)
{
ElemType t;
int i,j;
for(i=1;i
j=SelectMinKey(*L,i);
if(i!=j) {
t=L->elem[i];
L->elem[i]=L->elem[j];
L->elem[j]=t;
}
}
} /* *******选择排序完**************** */