讨论 / 关于快排细节
原始鸭 2010-05-24 03:43:00
点我顶贴 收藏 删除
像这道题, 比较有两个标准,我想问一下,即使有100个标准怎么用快排解决这样的题//..请付代码 或者是伪代码
#1 wish@2008-08-05 02:06:00
回复 删除
就在比较时加上所有标准就行了

#2 vinence@2008-08-05 02:11:00
回复 删除
同意楼上,

比较时+上标准就OK~

#3 lychees@2008-08-05 02:32:00
回复 删除
最好的方法应该是用一种稳定的排序~
#4 Mato完整版@2008-08-05 02:54:00
回复 删除
归并?

第9题也是归并……

#5 wish@2008-08-05 02:56:00
回复 删除
回 LS 及 LS 的 LS:

有时候,所谓的稳定算法未必最快

比如选择问题,求一个数组中第k大的数。

在实践中,期望线性时间的算法就比最坏情况线性时间的算法快,而且一般快很多,除非遇到极限数据。

#6 原始鸭@2008-08-05 06:07:00
回复 删除
唉...都是些没用的话

我要程序

#7 nypsystem@2008-08-06 07:22:00
回复 删除
这种题选择排序比较好写
#8 ssxyh@2008-08-06 07:28:00
回复 删除
写个比较的函数

function compare(a,b:node):boolean;

#9 lychees@2008-08-06 11:27:00
回复 删除
[接上文 稳定的排序]

先比较小的那个关键字...

再比较次小的...

for i:=100 downto 1 do

Sort A with key[i];

可问题来了... 考虑这个样例...

Ex 3.5 4.3 3.4

先用小数部分作为关键字...

- 4.3 3.4 3.5

再用整数部分作为关键字排序...

- >>??>??>>??

我们需要的结果应该是 (想一想)

--> 3.4 3.5 4.3

但是也有可能排序出这样的结果

3.5 3.4 4.3 (也就是说相同的关键字是不确定de)

如果我们能有一种算法,排序前后

-[关键字相同的数据前后顺序不发生变化]-...

那么就可以出现 3.4 3.5 4.3

我们想要的结果 ...(我们已经按小数部分把它们的次序确定了)

-[关键字相同的数据前后顺序不发生变化]-

这个性质就叫做...排序算法的稳定性...!

相当重要的一个性质...哪些排序算法有这些性质

我暂时不告诉你...自己思考或者去网上搜搜看吧~

o(∩_∩)o

#10 飞雪天涯@2008-11-29 06:42:00
回复 删除
bool L(schools a,schools b){

if (a.mark.size()>b.mark.size()) return false;

if (a.mark.size()<b.mark.size()) return true;

if (a.mark>b.mark) return false;

if (a.mark<b.mark) return true;

if (a.name>b.name) return true;

if (a.name<b.name) return false;

}

bool G(schools a,schools b){

if (a.mark.size()<b.mark.size()) return false;

if (a.mark.size()>b.mark.size()) return true;

if (a.mark<b.mark) return false;

if (a.mark>b.mark) return true;

if (a.name<b.name) return true;

if (a.name>b.name) return false;

}

查看更多回复
提交回复