网站大量收购独家精品文档,联系QQ:2885784924

数据结构_3[精选].ppt

  1. 1、本文档共185页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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,并使该函数返回排序所使用的值。

文档评论(0)

jsntrgzxy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档