有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 724|回复: 10
收起左侧

[C/C++] quick sort

 关闭 [复制链接]

该用户从未签到

11

主题

37

好友

1万

积分

第一章

积分
18487
发表于 2013-4-2 22:49:40 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
快排问题,对链表中的int 型数据排序,写了,。老是出错。

求介绍一下。我应该是L->next->next->……然后有点乱了……我得捋一捋。

还有就是链表中的 char型数据。字母表排序。。给指针数组跪了……也是老错。

typedef struct Node
{
    int data;
    char name[max];
    float f;
    int i;
    struct Node *next;
}LNode,*LinkList;

按照 name , f , i 进行排序。谁能给我一个Code?
void sort(LinkList L)
{
        ;
}
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

30

主题

127

好友

2万

积分

技术宅认证程序员

重度中二患者

积分
28325
发表于 2013-4-2 22:52:24 | 显示全部楼层
这到底是快排还是链表排序啊。。。链表的话就是顺序排序了。。。
等死星人
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

37

好友

1万

积分

第一章

积分
18487
 楼主| 发表于 2013-4-2 22:53:21 | 显示全部楼层
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

37

好友

1万

积分

第一章

积分
11825
发表于 2013-4-2 23:03:30 | 显示全部楼层
我没记错的话快速排序好像是每次找出中间元素作轴点的吧,对于链表来说不适用吧。。。

是指的”比较快速的排序“而不是“快速排序算法”吧?
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

37

好友

1万

积分

第一章

积分
18487
 楼主| 发表于 2013-4-2 23:05:19 | 显示全部楼层
jimsshom 发表于 2013-4-2 23:03
我没记错的话快速排序好像是每次找出中间元素作轴点的吧,对于链表来说不适用吧。。。

是指的”比较快速的 ...

确实想用快排。但想想冒泡 其实也挺适用于链表。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

30

主题

127

好友

2万

积分

技术宅认证程序员

重度中二患者

积分
28325
发表于 2013-4-2 23:05:48 | 显示全部楼层
本帖最后由 foodszhu 于 2013-4-2 23:15 编辑


如果不介意多占点空间。。。你可以先把链表拷贝到一个数组里。。。然后再拿这个数组进行快速排序。。。标准库<stdlib.h>中提供了一个快排函数,qsort,你只要写一个比较函数int cmp(const void*a, const void *b)就可以了
如果你从头到尾都是链表处理,顺序操作,可以考虑像什么冒泡排序,插入排序,比较科学
等死星人
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

37

好友

1万

积分

第一章

积分
11825
发表于 2013-4-2 23:11:56 | 显示全部楼层
汝欠咱的一生 发表于 2013-4-2 23:05
确实想用快排。但想想冒泡 其实也挺适用于链表。

细想一下也是可以的,轴点用第一个元素也ok的,可能就是效果没有取中点的好,不过也只是统计学上来说差点。

然后每次递归都是将一个链表拆成两个链表和一个单节点再连接成一个链表就行了。这样就不用额外空间了,使用了快排效率应该也ok。

应该不难实现,你再看看吧,我先去睡觉了
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

37

好友

7533

积分

序章

积分
7533
发表于 2013-4-3 01:08:43 | 显示全部楼层
对链表进行sort本来就很蛋疼 如果你练玩了quick sort可以试试merge sort
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

37

好友

7533

积分

序章

积分
7533
发表于 2013-4-3 01:11:53 | 显示全部楼层
汝欠咱的一生 发表于 2013-4-2 22:53
我想对 其中的 L->f 和 L->i 进行快排。

如果每个节点的数据是多维的 怎么定义comparable?
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

11

主题

37

好友

1万

积分

第一章

积分
18487
 楼主| 发表于 2013-4-3 07:20:46 | 显示全部楼层
以解决。用冒泡排序。
而对于char。本来不想用strcmp。但是实在写不出了。只能调用它了。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 3 天

连续签到: 1 天

[LV.2]偶尔看看I

41

主题

60

好友

2万

积分

第一章

守望者

积分
21763
发表于 2013-4-3 08:21:10 | 显示全部楼层
啊 难道我已经被生活所同化了吗 怎么感觉算法之于我就像是异次元的东西
如果有来生,要做一棵树,站成永恒,没有悲欢的姿势。一半在土里安详,一半在风里飞扬,一半洒落阴凉,一半沐浴阳光,非常沉默非常骄傲,从不依靠从不寻找。
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-5-19 01:42 , Processed in 0.312416 second(s), 19 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表