永发信息网

关于c++单链表排序的问题

答案:1  悬赏:30  手机版
解决时间 2021-07-18 00:45

#include<iostream>

using namespace std;
struct node{
float num;
node* next;
};
class numlist
{
public:
numlist();
~numlist();
void print();
void sort();
private:
node* h;
};

numlist::numlist()
{
h=0;
float num;
node *cur;
cout<<"Create the list and input the number by order.To end input -1."<<endl;
cin>>num;
while(num!=-1)
{
if(!h)
{
h=new node;
cur=h;
h->num=num;
h->next=0;
}
else
{
cur->next=new node;
cur=cur->next;
cur->num=num;
}
cin>>num;
}
if(h)
cur->next=0;
}

numlist::~numlist()
{
node *cur=h;
while(h)
{
h=h->next;
delete cur;
cur=h;
}
}
void numlist::print()
{
node *cur=h;
if(!cur)
cerr<<"error when printing because the list is empty"<<endl;
while(cur)
{
cout<<cur->num<<" ";
cur=cur->next;
}
}

void numlist::sort()
{
if(!h)
{
cerr<<"error when sorting because the list is empty"<<endl;
exit(1);
}
node *p1,*p2,*p3,*p4;
p1=h;
h=h->next;
p1->next=0;
while(h)
{
p2=h->next;
if(h->num<p1->num)
{
h->next=p1;
p1=h;
h=p2;
}
else
{
p3=p1;
p4=p3->next;
while(h->num>p3->num && p4)
{
p3=p4;
p4=p4->next;
}
if(!p4)
{
h->next=0;
p3->next=h;
h=p2;
}
else
{
p3->next=h;
h->next=p4;
h=p2;
}
}
}
h=p1;
}

int main()
{
numlist a;
a.print();
a.sort();
cout<<endl;
a.print();
return 0;
}

这是完整的程序...

下面换一下sort 函数

void numlist::sort()
{
if(!h)
{
cerr<<"error when sorting because the list is empty"<<endl;
exit(1);
}
node* p1,*p2,*p3,*p4;
p2=h;
p1=h->next;
if(!p1)
return;
else
{
while(p1)
{
while(p2->num<p1->num)
{
p2=p1;
p1=p1->next;
}//end while
if(p1->num<h->num)
{
p2->next=p1->next;
p1->next=h;
h=p1;
p1=p2->next;
}//end if
else
{
p3=h;
p4=h->next;
while(p4->num<p1->num)
{
p3=p4;
p4=p4->next;
}
if(p4!=p1)
{
p3->next=p1;
p2->next=p1->next;
p1->next=p4;
p1=p2->next;
}
else
{
p2=p1;
p1=p1->next;
}
}//end else
}//end while
}
}

想问一下这两个sort的区别...哪个函数效率比较高...

最佳答案
你好,楼主。
很幸运看到你的问题。
但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。
可能是你问的问题有些专业了,没人会。或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去问题的相关论坛去求助,那里的人通常比较多,也比较热心,可能能快点帮你解决问题。
希望我的回答也能够帮到你!
祝你好运~!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
柯南剧场版哪集最好看
怎么样、才能变得成熟
请各位侠客帮忙做一下这4道c语言编程——愚笨
为什么现在黄钻不赠送化肥和种子了?
DNF为什么在10月20号更新完后就玩不起了?
信产部怎么记录那些手机串号(IMEI)?
天龙八部42神器没持久了F2能修吗?
玩QQ军旗中发不出话了怎么办
问道育才要多少元宝!能开出几个,,运去不好会
世界最高楼是哪个?快
太拉首饰好还是50CC
怎样锻炼自己的演讲能力
说有十只羊有9只羊蹲在羊圈里只有一只羊蹲在
我的穿越火线是刚更新的4.0.5 又不能上了、
怎么辨别蜂蜜真假?
推荐资讯
N78怎么扫描手机
请问天堂在那?
我的生日快到咯、我该怎么像他说吖?
刚开始学网球是先买把旧拍子用用看还是直接买
dnf刷图型鬼泣加点(现在35级)
为什么我的QQ看不到等级呢?
求到了明天韩文版mp3
如何将多个记事本文件合并为一个文件
四川音乐大学
这是什么意思?请看图片
问问积分可以换QB吗?该怎么换
怎么样才能找到许多朋友
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?