一聚教程网:一个值得你收藏的教程网站

热门教程

查找算法

时间:2022-07-02 11:03:30 编辑:袖梨 来源:一聚教程网


#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    if(L.elem[k].key>L.elem[j].key)
      k=j;
  return k;
}
void SelectSort(SSTable *L)
{
  ElemType t;
  int i,j;
  for(i=1;ilength;++i){
    j=SelectMinKey(*L,i);
    if(i!=j) {
      t=L->elem[i];
      L->elem[i]=L->elem[j];
      L->elem[j]=t;
    }
  }
}           /* *******选择排序完**************** */

相关文章

热门栏目