在学校OJ上也做过的题,如果不想自己用qsort写比较函数的话可以借鉴这种结构体排序的方法
写结构体的比较函数:
//牛结构体
struct cow
{
int first;//第一轮得票数
int second;//第二轮得票数
int numebr;//代表牛的编号,这样在结构体进行排序的时候这个就会跟着换
};
//比较函数
int cmp1(cow a,cow b)
{
return a.first>b.first;
}
int cmp2(cow a,cow b)
{
return a.second>b.second;
}
这样的话相当于要sort排序两次,不知道如果使用二级排序方法能不能提高更快的速度
#include <iostream>
#include <algorithm>
using namespace std;
struct cow
{
int first;
int second;
int index;
};
struct cow s[50005];
int cmp1(cow a,cow b)//这个题非常关键,涉及到结构体二级排序
{
return a.first>b.first;
}
int cmp2(cow a,cow b)//注意这里的定义方式 这个题考前必看
{
return a.second > b.second;
}
int main(void)
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
{
scanf("%d%d",&s[i].first,&s[i].second);
s[i].index = i+1;
}
sort(s,s+n,cmp1);//对结构体使用sort!!1这个很关键
sort(s,s+k,cmp2);
cout<<s[0].index<<endl;
}
另外一种qsort比较麻烦的代码,当时在初级阶段时候写的
struct cow
{
int first;
int second;
int number;
};
int cmp1( const void *a ,const void *b)
{
struct cow *aa = (struct cow *)a;
struct cow *bb = (struct cow *)b;
return aa->first < bb->first ? 1 : -1;
}
int cmp2( const void *a ,const void *b)
{
struct cow *aa = (struct cow *)a;
struct cow *bb = (struct cow *)b;
return aa->second < bb->second ? 1 : -1;
}
int main(void)
{
struct cow s[50005];
int N,K;
int i;
scanf("%d",&N);
scanf("%d",&K);
for(i=0;i<N;i++)
{
scanf("%d%d",&s[i].first,&s[i].second);
s[i].number = i;
}
qsort(s,N,sizeof(s[0]),cmp1);
qsort(s,K,sizeof(s[0]),cmp2);
// for(i=0;i<K;i++)
// {
// printf("s[%d].first = %d\ts[%d].second = %d\ts[%d].number=%d\n",i,s[i].first,i,s[i].second,i,s[i].number+1);
// }
printf("%d",s[0].number+1);
}
当时可能还没有完全会用全局变量