- 1、本文档共185页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构_3[精选]
* * 程序3-43箱子排序 voidBinSort(ChainNode X,int range) {//按分数排序 intlen=X.Length(); Node x; ChainNode *bin; bin=new ChainNode[range+1]; //分配到每个箱子中 for(inti=1;i=len;i++){ X.Delete(1,x); bin[x.score].Insert(0,x); } //从箱子中收集各元素 for(intj=range;j=0;j--) while(!bin[j].IsEmpty()){ bin[j].Delete(1,x); X.Insert(0,x);} delete[]bin;} * * 时间复杂性 在两个for循环中执行的每一次插入和删除操作所需要的时间均为Θ(1) 因此第一个for循环的的复杂性为Θ(n),其中n为输入链表的长度 第二个for循环的复杂性为Θ(n+range) 因此函数BinSort总的复杂性为Θ(n+range)(如果成功的话)。 * * 程序3-44Binsort作为Chain类的成员 templateclass T Void ChainT::BinSort(int range) {//按分数排序 int b;//箱子索引号 ChainNodeT **bottom,**top; //箱子初始化 bottom=new ChainNodeT*[range+1]; top=new ChainNodeT*[range+1]; for(b=0;b=range;b++) bottom[b]=0; * * 程序3-44Binsort作为Chain类的成员 //把节点分配到各箱子中 for(;first;first=first-link){//添加到箱子中 b=first-data; if(bottom[b]){//箱子非空 top[b]-link=first; top[b]=first;} else//箱子为空 bottom[b]=top[b]=first; } * * 程序3-44Binsort作为Chain类的成员 //收集各箱子中的元素,产生一个排序链表 ChainNodeT*y=0; for(b=0;b=range;b++) if(bottom[b]){//箱子非空 if(y)//不是第一个非空的箱子 y-link=bottom[b]; else//第一个非空的箱子 first=bottom[b]; y=top[b];} if(y)y-link=0; delete[]bottom; delete[]top; } * * 时间复杂性 第一和第三个for循环所需要的时间为Θ(range) 第二个for循环所需要的时间为Θ(n) 因此总的时间复杂性为Θ(n+range) * * 思考 b=first-data; ? * * 从Node类型到数字类型的转换 程序3-42 又一种处理操作符重载的方法 class Node { friend ostream operator(ostream, const Node ); public: int operator !=(Node x) const {return (score != x.score|| name[0] != x.name[0];} operator int() const {return score;} private: int score; char *name; } ; ostream operator(ostream out, const Node x) { out x.score x.name[0] ; return out;} * * 分析 可以注意到BinSort函数并未改变具有同样分数的节点之间的相对次序。 例如,假定在输入链中E、G和H的分数均为3,E出现在G之前,G出现在H之前,那么,在排序后的链表中,E仍出现在G之前,G也仍然出现在H之前。 在有些排序应用中,要求排序算法不得改变同值元素之间的相对次序。 * * 稳定排序 如果一个排序算法能够保持同值元素之间的相对次序,则该算法被称之为稳定排序(stable sort)。 * * 思考 如果一个学生有多门课程成绩? * * 函数指针 函数在编译时被分配一个入口地址,称为函数的指针。 T F(T x) ?? T (*value)(T x) 通过指针变量来访问它指向的函数。 函数指针变量常用于参数传递。 * * 方案 为BinSort增加一个附加的参数value,并使该函数返回排序所使用的值。
您可能关注的文档
- 数字逻辑课后答案[精选].ppt
- 数学与体育参考资料.doc
- 数学与应用数学2010级、信息与计算科学2010级《数学实验任务》实验任务[精选].doc
- 数学与思考[精选].doc
- 数字逻辑电路 2逻辑函数及其简化[精选].ppt
- 数学与文学课件.ppt
- 数学与经济金融课件[精选].ppt
- 数学中的一般化与特殊化例谈[精选].doc
- 数学[精选].ppt
- 数学中的逻辑与表达[精选].doc
- 新高考生物二轮复习讲练测第6讲 遗传的分子基础(检测) (原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第3讲 酶和ATP(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第9讲 神经调节与体液调节(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第8讲 生物的变异、育种与进化(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第5讲 细胞的分裂、分化、衰老和死亡(检测)(原卷版).docx
- 新高考生物二轮复习讲练测第12讲 生物与环境(讲练)(原卷版).docx
- 新高考生物二轮复习讲练测第11讲 植物生命活动的调节(检测)(原卷版).docx
文档评论(0)