曾经用到过一次快排,感觉代码量没有减小,反而比较函数有点难编,但是这种排序一般不会出错(前提是比较函数写对了),而且速度很快,熟练后其实还是非常好用的!

用到快排是因为我做到一个题,是uva的10420,题目为战利品清单,大致意思是要统计在名单上每个国家的女人名字出现了几次。开始以为要考虑去掉重名之类的(题目没有提重名一事),后来百度一下看网上有人说不用考虑重名,就没有考虑了。

我看了一下网上的代码,在比较函数那里都写错了,不知道是怎么过的都,给出一个AC了的版本,比较函数是先比较两个字符串的首字母,首字母相同再比较第二个字母,第三个等等.....我试过应该不能直接用strcmp函数,因为strcmp函数好像是要计算每个字母的ascii码后相加比较,所以如果两个字符串位数不同会影响结果。比如说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;
}

结构体快排qsort()的更多相关文章

  1. 结构体快排回顾(sort)

    一般来说,我做竞赛的时候排序一般用快排 很快很方便 普通sort(从小到大) sort(a,a+n); 直接贴一段代码吧,包含了vector,sort,结构体等简单东西综合 #include < ...

  2. cmp快排 结构体快排

    由于深陷于JAVA的面向对象思想,常常会用到结构体,记一下这个模板,方便直接调用进行结构体排序: struct point { int val,turn; }; bool cmp(struct poi ...

  3. 排序方法之标准库中的快排 qsort ()函数

    C标准库qsort()函数的用法(快排) 使用快速排序例程进行排序 头文件:stdlib.h 用 法: void qsort(void *base, int  nelem, int  width, i ...

  4. 68.qq号索引结构体写入内存,并实现快速排序

    //两个步骤,第一步读取文件,并且初始化索引结构体,把初始化的索引结构体写入到文件,第二步,读取这个文件到索引结构体 //并对这个结构体进行快速排序,得到顺序的索引,再写入文件 #define _CR ...

  5. c语言中使用自带的qsort(结构体排序)+ 快排

    c中没有自带的sort函数emm 不过有自带的qsort函数 (其实用法都差不多(只是我经常以为c中有sort 头文件要用 #include <stdlib.h> 一定要重新把指针指向的值 ...

  6. STL函数库的应用第二弹——快排sort函数与结构体关键字排序

    时隔20多天,本蒟蒻终于记起了他的博客园密码!!! 废话不多说,今天主题:STL快排函数sort()与结构体关键字排序 Part 1:引入和导语 首先,我们需要知道,algorithm库里有一些奇怪的 ...

  7. 快排 快速排序 qsort quicksort C语言

    现在网上搜到的快排和我以前打的不太一样,感觉有点复杂,我用的快排是FreePascal里/demo/text/qsort.pp的风格,感觉特别简洁. #include<stdio.h> # ...

  8. 使用qsort对结构体的数据排序

    1007 DNA 排序 题目大意: 序列“未排序程度”的一个计算方式是元素乱序的元素对个数.例如:在单词序列“DAABEC'”中,因为D大于右边四个单词,E大于C,所以计算结果为5.这种计算方法称为序 ...

  9. 使用C++/C qsort 标准库对结构体进行快速排序

    C++标准快速排序库qsort进行结构体快速排序 代码如下 #include <stdio.h> #include <stdlib.h> typedef struct { in ...

随机推荐

  1. shell编程之分隔符

    1 #!/bin/bash 2 line="root:x:0:0:root:/root:bin/bash" 3 oldIFS=$IFS 4 IFS=":" 5 ...

  2. 设计模式之适配器模式(Adapter)

    适配器模式原理:适配器模式属于结构型模式,主要作用是完成功能的转换, 1.通过一个类继承目标类. 2.需要适配的类 3.适配器 代码如下: #include <iostream> usin ...

  3. JavaScript 文件上传类型判断

    文件上传时用到一个功能,使用html元素的input标签实现, <input id="imageFile" name="imageFile1" accep ...

  4. angularjs取Sevice和directive的引用

    取Sevice和directive的引用 3: Grab any Services We can grab a reference to any service using the injector  ...

  5. [大牛翻译系列]Hadoop(5)MapReduce 排序:次排序(Secondary sort)

    4.2 排序(SORT) 在MapReduce中,排序的目的有两个: MapReduce可以通过排序将Map输出的键分组.然后每组键调用一次reduce. 在某些需要排序的特定场景中,用户可以将作业( ...

  6. POJ 1503 Integer Inquiry(大数相加,java)

    题目 我要开始练习一些java的简单编程了^v^ import java.io.*; import java.util.*; import java.math.*; public class Main ...

  7. POJ 2549

    Sumsets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8235   Accepted: 2260 Descripti ...

  8. DevExpress Form那些事儿

    1:设置子窗体依附父窗体 首先将父窗体的属性中  IsMdiContainer 设置为 True   , 就是将窗体设置为 MDI窗体.子窗体和父窗体都是继承自RibbonForm的. 代码如下 : ...

  9. 使用 Struts 2 开发 RESTful 服务

    REST 简介 REST 是英文 Representational State Transfer 的缩写,这个术语由 Roy Thomas Fielding 博士在他的论文<Architectu ...

  10. Jmeter之Bean shell使用(二)

    上一篇Jmeter之Bean shell使用(一)简单介绍了下Jmeter中的Bean shell,本文是对上文的一个补充,主要总结下常用的几种场景和方法,相信这些基本可以涵盖大部分的需求.本节内容如 ...