结构体快排qsort()
2013-10-12 17:29
204 查看
曾经用到过一次快排,感觉代码量没有减小,反而比较函数有点难编,但是这种排序一般不会出错(前提是比较函数写对了),而且速度很快,熟练后其实还是非常好用的!
用到快排是因为我做到一个题,是uva的10420,题目为战利品清单,大致意思是要统计在名单上每个国家的女人名字出现了几次。开始以为要考虑去掉重名之类的(题目没有提重名一事),后来百度一下看网上有人说不用考虑重名,就没有考虑了。
我看了一下网上的代码,在比较函数那里都写错了,不知道是怎么过的都,给出一个AC了的版本,比较函数是先比较两个字符串的首字母,首字母相同再比较第二个字母,第三个等等.....我试过应该不能直接用strcmp函数,比如说China和England两个国家,按题目意思是应该China在前,England在后的(字典序),但是strcmp比较则是England在前了。
用到快排是因为我做到一个题,是uva的10420,题目为战利品清单,大致意思是要统计在名单上每个国家的女人名字出现了几次。开始以为要考虑去掉重名之类的(题目没有提重名一事),后来百度一下看网上有人说不用考虑重名,就没有考虑了。
我看了一下网上的代码,在比较函数那里都写错了,不知道是怎么过的都,给出一个AC了的版本,比较函数是先比较两个字符串的首字母,首字母相同再比较第二个字母,第三个等等.....我试过应该不能直接用strcmp函数,比如说China和England两个国家,按题目意思是应该China在前,England在后的(字典序),但是strcmp比较则是England在前了。
#include<iostream> #include<cstring> #include<string> #include<cstdlib> using namespace std; struct list { char country[20]; //char name[80]; int num; }; list data[2000]; int cmp_country(const void* a,const void* b) { int index=0; int lena=strlen(((list*)a)->country); int lenb=strlen(((list*)b)->country); int len=strlen(((list*)a)->country)<strlen(((list*)b)->country)?strlen(((list*)a)->country):strlen(((list*)b)->country); while(index!=len){ char cmp_a=((list*)a)->country[index]; char cmp_b=((list*)b)->country[index]; if (cmp_a!=cmp_b) return cmp_a<cmp_b?-1:1; index++; } if (lena==lenb) return 0; else if (lena>lenb) return 1; else return -1; } int main() { int n,counts=0; cin>>n; for (int i=0;i<n;i++) { char tmpcoun[20]; cin>>tmpcoun; char tmpname[80]; cin.getline(tmpname,80); bool flag=0; for (int j=0;j<counts;j++) { if (strcmp(tmpcoun,data[j].country)==0) { data[j].num++; flag=1; break; } } if (flag==0) { strcpy(data[counts].country,tmpcoun); data[counts++].num=1; } } qsort(data,counts,sizeof(data[0]),cmp_country); for (int i=0;i<counts;i++) { cout<<data[i].country<<" "<<data[i].num<<endl; } return 0; }
相关文章推荐
- 1069 qsort你这是什么状况,printf一下个别结构体的值发生变化?
- qsort()与结构体相结合
- 结构体二级排序 qsort
- qsort与sort结构体排序
- qsort与bsearch中比较结构体
- C语言 使用内置快排函数——qsort(),以及结构体两元素的话
- STL_qsort(对int,char,vector,结构体排序举例)
- usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)
- 使用qsort对结构体的数据排序
- qsort sort 结构体排序
- qsort和sort对结构体的排序
- qsort结构体排序 (初学者必知)
- 标准c中的qsort对于结构体排序的测试程序。
- qsort对数组字符串/结构体字符串排序
- qsort 排序结构体
- 1482. 奖学金(关于结构体与qsort的思考)
- 【慢慢学算法】:成绩排序(qsort对结构体的多级排序)
- 结构体、qsort的使用
- qsort对多维数组和结构体的排序
- 结构体快排qsort()