所谓稳定排序,是指对一个序列进行排序之后,如果两个元素的值相等,则原来乱序时在前面的元素现在(排好序之后)仍然排在前面。STL中提供stable_sort()函数来让我们进行稳定排序。为了更好的说明稳定排序的效果,我们定义了一个结构体元素,一个value成员和一个index成员,前者表示元素的值,后者表示乱序时的索引。
 stable_sort()内部由归并排序来实现。
  //Coded by 代码疯子
 //http://www.programlife.net/
 #include <iostream>
 #include <vector>
 #include <algorithm>
 #include <iterator>
 using namespace std;
  
 typedef struct TagNode
 {
         int value;
         int index;
 }Node;
  
 bool myCmp(const Node& a, const Node& b)
 {
         return a.value < b.value;
 }
  
 int main(int argc, char **argv)
 {
         vector<Node> coll;
         Node tmp;
         int idx = 0, num;
  
         while(cin >> num && num)
         {
                ++idx;
                tmp.value = num;
                tmp.index = idx;
                coll.push_back(tmp);
         }
  
         stable_sort(coll.begin(), coll.end(), myCmp);
  
         cout << "Index\tValue:" << endl;
         vector<Node>::iterator pos;
         for(pos = coll.begin(); pos != coll.end(); ++pos)
         {
                cout << pos->index << "\t" << pos->value << endl;
         }
  
         return 0;
 }
  程序的运行结果如下图所示,可以看到,对于元素值相同的元素,索引小的在前面,稳定排序就是这么一个效果。
 