ACM:C: 稳定排序
Description
给出二元数组a[MAXN][2],按第一个关键值从小到大排序后输出,要求第一关键值相同情况下不改变原数组次序
Input
每组数据第一行为整数n,1 <= n <= 10 ^ 5。
接下来n行每行两个整数空格隔开。
Output
输出排序后的数组
Sample Input
3 2 4 1 0 2 3 3 4 2 0 4 0 2
Sample Output
1 0 2 4 2 3 0 4 0 2 4 2
自带的sort函数确实不稳定,自己写的都是答案错误,借鉴别人的,加个新参数,才变成稳定排序。
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <cmath>#include <algorithm>#include <string>#define LL long long#define N 100005using namespace std;struct node{int fir;int sec;int index;}arr[N];
int cmp(node x,node y){if(x.fir==y.fir)return x.index<y.index;elsereturn x.fir<y.fir;}int main(){int n,i;while(cin>>n){
for(i=0;i<n;i++){
scanf("%d%d",&arr[i].fir,&arr[i].sec);arr[i].index=i;}
sort(arr,arr+n,cmp);
for(i=0;i<n;i++)printf("%d %d\n",arr[i].fir,arr[i].sec);}
return 0;}