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

📄 code1.txt

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


static void sift(HEAPSORT *p[],
int k,int i,int l)
{
     int m,n;

     char *t;

     HEAPSORT *w;

     t=(*p[i+k]).KEY;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]).KEY,
                 (*p[n+k+1]).KEY)<0))
     //判断p[i]和p[2*i]大小,前者较大,不作调整.
     //否则.交换p[i]和p[2*i]

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

      if(strcmp(t,(*p[n+k]).KEY)<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  mtheap(HEAPSORT *p[],int n,int k,int m)
{
   int i,l;
   HEAPSORT *w;
   void sift(HEAPSORT *p[],int k,int i,int l);
   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 + -