知识大全 数据结构考研分类复习真题 第五章 答案[44]
Posted 小数
篇首语:笔落惊风雨,诗成泣鬼神。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第五章 答案[44]相关的知识,希望对你有一定的参考价值。
( )在n个正整数中 选出k(k<<m)个最大的数 应使用堆排序方法 对深度为h的堆 筛选算法中关键字的比较次数至多为 (h )次 建堆总共进行的关键字比较次数不超过 n 堆排序在最坏情况下的时间复杂度是O(nlogn)
int r[ ]; // r[ ]是整型数组
( )void sift(int r[] int k m tag) //已知r[k+ m]是堆 本算法将r[k m]调整成堆 tag= 建立大根堆 tag= 建立小根堆 i=k;j= *i;x=r[k]; while (j<=m) if (tag== ) //建立小根堆 if (j<m && r[j]>r[j+ ]) j++;//沿关键字小的方向筛选 if(r[j]<x)) r[i]=r[j];i=j;j= *i; else break; else //建立大根堆 if (j<m && r[j]<r[j+ ]) j++;//沿关键字小的方向筛选 if(r[j]>x) r[i]=r[j];i=j;j= *i; else break; r[i]=x; //sift main(int argc char *argv[]) //根据命令行中的输入 从 个数中选取n个最大数或n个最小数 int m= i j; n=augv[ ]; //从命令行输入的第二个参数是需要输出的数的个数 if(n>m)printf( 参数错误\\n );exit( ); for(i= ;i<m;i++) scanf( %d &r[i]); //输入 个大小不同的正整数 if (augv[ ]== a ) //输出n个最大数 要求建立大根堆 for(i=m/ ;i> ;i ) sift(r i m ) printf( %d个最大数依次为\\n n); for(i=m;i>m n+ ;i ) //输出n个最大数 printf( % d r[i]); j++; if((j+ )% == ) printf( \\n );//一行打印 个数 sift(r i ); //调堆 else //(augv[ ]== i ) //输出n个最小数 要求建立小根堆 for(i=m/ ;i> ;i ) sift(r i m ) printf( %d个最小数依次为\\n n); for(i=m;i>m n+ ;i ) //输出n个最小数 printf( % d r[i]); j++; if((j+ )% == ) printf( \\n );//一行打印 个数 sift(r i ); //调堆 //main
[算法讨论]算法讨论了建堆 并输出n(n小于等于m)个最大(小)数的情况 由于要求输出n个最大数或最小数 必须建立极大化堆和极小化堆 注意输出时的for循环控制到变量i从m变化到m n+ 这是堆的性质决定的 只有堆顶元素才是最大(小)的 要避免使i从 到n来输出n个最大(小)数的错误
cha138/Article/program/sjjg/201311/23026相关参考
第五章 数组和广义表答案 一选择题 BLJCICBBAHCEAFBEABBBBBABBACDCDFCDCACA 二判断题 ×√√×××√××××√√√ 部分答案解释如下 错误
.这是一个递归调用问题运行结果为DBHEAIFJCKGL ()FOR循环中每次执行PerfectShuffle(AN)和CompareExchange(AN)的结果 第次A[]=[] A[]
.() () ()i=j=即A[]  
()略 ()求广义表原子个数的递归模型如下 f(p)= PROCNumber(p:glist;VARn:integer) VARm:integer; n:=; IFp<>N
深度为长度为 ()略 ()表的长度为深度为 ()head(tail(head(head(head(tail(tail(tail(tail(A))))))))) 共享结构广义表A=(((bc
Head(Tail(Head(Head(L)))) Head(Head(Head(Tail(Head(Tail(L)))))) 类似本题的另外叙述的几个题解答如下 ()head(head(t
head(tail(head(tail(H)))) (b) (xyz) (de) GetHead(GetHead(GetTail(L))) 本算法中首先数组b中元素以逆置顺序放入d数组中
.每个元素个二进制位主存字长位故每个元素占个字长行下标可平移至到 () () ()s+ ()s+ . 公式 +L(
.错误有以下几处 ()过程参数没有类型说明()出错条件判断缺少OR(i+k>last+) ()删除元素时FOR循环应正向不应用反向DOWNTO()count没定义 低效体现在两处 (
公式LOC(aijk)=LOC(a)+[v*v*(ic)+v*(jc)+(kc)]*l(l为每个元素所占单元数) 第行第列 ()()() i(i)/+j(<=ij<