这两个函数都能完成排序,时间复杂度在所有的排序中也是最低,唯一的差别就是stable_sort是一种稳定的排序,在两个元素相同的时候不交换位置,而sort则不然,这个差别在单一普通数组排序中没影响,但是如果对结构体进行排序的话就会有明显差别。具体参照 POJ 1007 点击打开题目链接 这道题就是用普通的sort会改变结构体的相对位置,放上
AC代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int len; struct node { char s[55]; int score; }p[110]; bool cmp(const node a, const node b) { return a.score < b.score; } int sum(char *p) { int len, sum; sum = 0; len = strlen(p); for(int i = 0; i < len; ++i) { for(int j = i + 1; j < len; ++j) { if(p[i] > p[j]) sum++; } } return sum; } int main() { int num; char s[110]; while(scanf("%d%d", &len, &num) != EOF) { for(int i = 0; i < num; ++i) { scanf("%s", p[i].s); p[i].score = sum(p[i].s); } stable_sort(p, p + num, cmp); //稳定排序,等值不交换 for(int i = 0; i < num; ++i) printf("%s ", p[i].s); } return 0; }