﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-ACFirst-随笔分类-排序</title><link>http://www.cppblog.com/zzfmars/category/14564.html</link><description>行胜于言，孤行无益，思为行先。有所为，有所不为。</description><language>zh-cn</language><lastBuildDate>Sat, 21 Aug 2010 13:16:15 GMT</lastBuildDate><pubDate>Sat, 21 Aug 2010 13:16:15 GMT</pubDate><ttl>60</ttl><item><title>pku1065</title><link>http://www.cppblog.com/zzfmars/archive/2010/08/19/123980.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Thu, 19 Aug 2010 08:54:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2010/08/19/123980.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/123980.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2010/08/19/123980.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/123980.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/123980.html</trackback:ping><description><![CDATA[<a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1065">http://acm.pku.edu.cn/JudgeOnline/problem?id=1065</a><br>排序+贪心<br><br>排序方式可以使用fastsort()，这个可以使用模板，也可以自己写，还可以使用STL的sort()函数。<br>
<h2><a name=sort>排序(sort)</a> </h2>
<em>语法:</em>
<table bgColor=#ccccff>
    <tbody>
        <tr>
            <td>
            <pre>  void sort();
            void sort( Comp compfunction );
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<p>sort()函数为链表排序，默认是升序。如果指定compfunction的话，就采用指定函数来判定两个元素的大小。</p>
<hr>
<span class=Apple-style-span style="WORD-SPACING: 0px; FONT: medium Simsun; TEXT-TRANSFORM: none; COLOR: rgb(0,0,0); TEXT-INDENT: 0px; WHITE-SPACE: normal; LETTER-SPACING: normal; BORDER-COLLAPSE: separate; orphans: 2; widows: 2; webkit-border-horizontal-spacing: 0px; webkit-border-vertical-spacing: 0px; webkit-text-decorations-in-effect: none; webkit-text-size-adjust: auto; webkit-text-stroke-width: 0px"><span class=Apple-style-span style="FONT-SIZE: 14px; LINE-HEIGHT: 22px; FONT-FAMILY: Arial">
<pre style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: normal; FONT-SIZE: 14px; PADDING-BOTTOM: 0px; MARGIN: 0px; LINE-HEIGHT: 22px; PADDING-TOP: 0px; ZOOM: 1; FONT-FAMILY: Arial; WORD-WRAP: break-word">首先实现这个排序有两种方式，一个自己定义一个返回值为bool的比较函数。
一个是自己定义类中的&lt;操作函数。
第一种方式可以简单写为。
bool cmp(node x,node y)
{
return x.key1&lt;b.key1;
}
sort(vec.begin,vec.end.cmp);
这种排序是从小到大的，也就是如果cmp(a,b)为真，则a一定在b的前面，如果
cmp(a,b)和cmp(b,a)都为false.的话，也就是a.key1==b.key1,则他们的先后顺序则是不一定的，可能a在b前面，也可能b在a前面。
也就是说这种排序算法是不稳定的。
第二种方式
struct node{
int key1;
int key2;
book operator &lt;(const node &amp;m)
{
return key1&lt;m.key1;
}
}
这样就不用自己定义比较函数。
对与sort()排序是不稳定的，正如前面说的，如果需要稳定排序的话，可以使用
stable_sort，它可以保证相等的元素原来的相对次序是不变的。 </pre>
</span></span>另外贪心选择时，要逐步选择，具体代码可以参考Discuss上面的。
<img src ="http://www.cppblog.com/zzfmars/aggbug/123980.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-08-19 16:54 <a href="http://www.cppblog.com/zzfmars/archive/2010/08/19/123980.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pku1007</title><link>http://www.cppblog.com/zzfmars/archive/2010/08/13/123301.html</link><dc:creator>Kevin_Zhang</dc:creator><author>Kevin_Zhang</author><pubDate>Fri, 13 Aug 2010 02:41:00 GMT</pubDate><guid>http://www.cppblog.com/zzfmars/archive/2010/08/13/123301.html</guid><wfw:comment>http://www.cppblog.com/zzfmars/comments/123301.html</wfw:comment><comments>http://www.cppblog.com/zzfmars/archive/2010/08/13/123301.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zzfmars/comments/commentRss/123301.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zzfmars/services/trackbacks/123301.html</trackback:ping><description><![CDATA[<a href="http://acm.pku.edu.cn/JudgeOnline/problem?id=1007">http://acm.pku.edu.cn/JudgeOnline/problem?id=1007</a><br>题意理解让我纠结了半天，理解了题意这题就是一个稳定排序问题。在一个DAN序列中算混乱度时按字母顺序，而输出时按混乱度排序，而且要强调的是本题必须用稳定排序。也可以把序号当成第二关键字，这样任何一个排序方法都可以。<br><br>什么排序方法是稳定排序？那些方法是不稳定排序？什么原因决定其是否稳定？<br><br>2010/08/13<br><br><br><br><br><br><br><br><br><br><br><br><br><br>——————————————————————————————————————————————————————————— 
<img src ="http://www.cppblog.com/zzfmars/aggbug/123301.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zzfmars/" target="_blank">Kevin_Zhang</a> 2010-08-13 10:41 <a href="http://www.cppblog.com/zzfmars/archive/2010/08/13/123301.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>