有时候,所谓的稳定算法未必最快
比如选择问题,求一个数组中第k大的数。
在实践中,期望线性时间的算法就比最坏情况线性时间的算法快,而且一般快很多,除非遇到极限数据。
先比较小的那个关键字...
再比较次小的...
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
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;
}