⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 code.txt

📁 利用Visual c++编程思想方法实现基于图书编码分类算法的程序
💻 TXT
字号:
typedef struct ISBN
{
       char  press[12];
       char  unknow[12];
       char  kind[12];
}HEAPSORT;          
           //ISBN码的结构描述

void CAsDlg::sift_press(HEAPSORT 
*p[], int k, int i, int l)

{

   int m,n;
   char *t;
   HEAPSORT *w;

   t=(*p[i+k]).press;w=p[i+k];
    n=2*(i+1)-1;m=i;
//令n指向左孩子

   while(n<=l-1)
// 沿key较大的孩子结点向下筛选

   {

    if((n<l-1)&&(strcmp((*p[n+k]).press,
   (*p[n+k+1]).press)<0))
//判断p[i]和p[2*i]大小,前者较大,不作调整.
//否则.交换p[i]和p[2*i]

        n=n+1;  
    //令n指向右孩子

      if(strcmp(t,(*p[n+k]).press)<0)
       {
          p[m+k]=p[n+k];
          m=n;n=2*(m+1)-1;
        } //始m,n指向下一层结点

        else n=l;//循环退出

     }
    p[m+k]=w;
    return;
}                   
 //以编码中出版社为关键字筛选,初始建堆



void CAsDlg::sift_unknow(HEAPSORT *p[],
 int k, int i, int l)
{
  int m,n;
  char *t;
  HEAPSORT *w;

  t=(*p[i+k]).unknow;w=p[i+k];
   n=2*(i+1)-1;m=i;
     //令n指向左孩子

   while(n<=l-1)
     // 沿key较大的孩子结点向下筛选

     {

    if((n<l-1)&&(strcmp((*p[n+k]).unknow,
            (*p[n+k+1]).unknow)<0))
  //判断p[i]和p[2*i]大小,前者较大,不作调整.
  //否则.交换p[i]和p[2*i]

		n=n+1;//令n指向右孩子

        if(strcmp(t,(*p[n+k]).unknow)<0)
        {
	p[m+k]=p[n+k];
	m=n;n=2*(m+1)-1;
	} //始m,n指向下一层结点

		else n=l;//循环退出
	}

    p[m+k]=w;
    return;
}            
   //以编码中未知码为关键字筛选,初始建堆


void CAsDlg::sift_kind(HEAPSORT *p[], 
int k, int i, int l)
{
 int m,n;
 char *t;
 HEAPSORT *w;

 t=(*p[i+k]).kind;w=p[i+k];n=2*(i+1)-1;m=i;
        //令n指向左孩子

while(n<=l-1) 
  // 沿key较大的孩子结点向下筛选

 {

   if((n<l-1)&&(strcmp((*p[n+k]).kind,
   (*p[n+k+1]).kind)<0))
  //判断p[i]和p[2*i]大小,前者较大,不作调整.
  //否则.交换p[i]和p[2*i]

	n=n+1;  //令n指向右孩子

        if(strcmp(t,(*p[n+k]).kind)<0)

        {
	p[m+k]=p[n+k];
	m=n;n=2*(m+1)-1;
	} //始m,n指向下一层结点

	else n=l; //循环退出

	}
    p[m+k]=w;
    return;
}                  
    //以编码中类别为关键字筛选.初始建堆

//初始建堆工作可通过反复筛选来完成,
//通过调用算法sift(),依次将以p[i],p[i-1],
//....p[1]为根的子树调整为堆




void CAsDlg::mtheap(HEAPSORT *p[], 
int n, int k, int m, 
void (*sift)(HEAPSORT *p[], int k, 
int i, int l))

{
	int i,l;
   HEAPSORT *w;
   if(k<0) k=0;
   if(m>n-1) m=n-1;
    l=m-k+1;

    for(i=l/2-1;i>=0;i--)
      (*sift)(p,k,i,l);
//从i开始,通过调用算法sift()
//依次将以p[i],p[i-1]
//,...p[1]为根的子树调整为堆

    for(i=l-1;i>=1;i--)
    {

     w=p[k];p[k]=p[i+k];p[i+k]=w;
//将堆顶记录和当前为经排序
//子序列中最后一个记录相互交换

     (*sift)(p,k,0,i);
//将p[]从新调整为大顶堆

     }  //实现堆排序

   return;
}   //堆排序
                   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -