其实最近都没有兴趣做排序题目,因为我觉得纯粹排序对我而言进步不大,但是舍友TLE了,叫我试一试。

整道题的思路很简单啦,我用的是快排,比较的原则也给得很清楚,不必多言,我没有用stdlib的快排,也没有用scanf,printf等IO,因为我觉得没什么必要啦。

当然,如果用了程序当然会更快~

我甚至有点觉得这题目是模拟题……CE一次,没包括string头文件,之后就AC了。

/*******************************************************************************/
/* OS : 3.2.0-58-generic #88-Ubuntu SMP Tue Dec 3 UTC 2013 GNU/Linux
* Compiler : g++ (GCC) 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
* Encoding : UTF8
* Date : 2014-03-26
* All Rights Reserved by yaolong.
*****************************************************************************/
/* Description: ***************************************************************
*****************************************************************************/
/* Analysis: ******************************************************************
*****************************************************************************/
/*****************************************************************************/ #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std; class student{
public:
string id ;
string name;
int score;
student(string i,string n,int s){
id=i;
name=n;
score=s;
}
student (){}
student & operator=(const student& tmp){
this->id=tmp.id;
this->name=tmp.name;
this->score=tmp.score;
return *this;
}
void show(){
cout<<id<<" "<<name<<" "<<score<<endl;
}
};
student stu[100001];
bool isBig1(student &s1,student &s2){
for(int i=0;i<6;i++)
if(s1.id[i]>s2.id[i]) return 0;
else if(s1.id[i]<s2.id[i]) return 1; return 0;
}
bool isBig2(student &s1,student &s2){
int len1=s1.name.length();
int len2=s2.name.length();
int min=len1>len2?len2:len1;
if(s1.name==s2.name){
return isBig1(s1,s2);
} for(int i=0;i<min;i++){
if(s1.name[i]>s2.name[i]) return 0;
else if(s1.name[i]<s2.name[i]) return 1;
}
if(len1>len2){
return 0;
}else if(len1<len2){
return 1;
} return 0;
}
bool isBig3(student &s1,student &s2){ if(s1.score==s2.score){
return isBig1(s1,s2);
}
return s1.score<s2.score;
}
int partition(student a[],int p,int r,int cases)
{
student x=a[r];//通常,拿最后一个值,作为预期的中间值
int middle=p;//记录“较小的一段数据”的最大下标。通常这个值在p和r的中间,故起名middle
for(int j=p; j<r; j++)
{
switch(cases){
case 1: //按id排序
if(isBig1(a[j],x))
{
if(j!=middle)
{
student temp=a[middle];
a[middle]=a[j];
a[j]=temp;
}
middle++;
} break;
case 2:
if(isBig2(a[j],x))
{
if(j!=middle)
{
student temp=a[middle];
a[middle]=a[j];
a[j]=temp;
}
middle++;
}
break;
case 3:
if(isBig3(a[j],x))
{
if(j!=middle)
{
student temp=a[middle];
a[middle]=a[j];
a[j]=temp;
}
middle++;
}
break; } }
student temp=a[r];
a[r]=a[middle];
a[middle]=temp;
return middle;
} void QuickSort(student a[],int p,int r,int c)
{
if(p<r)
{
int q=partition(a,p,r,c);
QuickSort(a,p,q-1,c);
QuickSort(a,q+1,r,c);
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int n,c,i;
int p=0;
while(cin>>n>>c&&(n||c)){
p++;
for(i=0;i<n;i++){
cin>>stu[i].id>>stu[i].name>>stu[i].score;
} cout<<"Case "<<p<<":\n";
QuickSort(stu,0,n-1,c);
for(i=0;i<n;i++)
stu[i].show(); } #ifndef ONLINE_JUDGE
fclose(stdin);
#endif return 0; }

HDU1862EXCEL排序的更多相关文章

  1. HDU-1862-EXCEL排序

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1862 这个题考的就是你对sort函数的掌握:会用sort函数对字符串,数字排序,只要懂得话题目很简单 ...

  2. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  3. iOS可视化动态绘制八种排序过程

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  4. JavaScript实现常用的排序算法

    ▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...

  5. [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序

    用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html  目录 马桶排序(令人 ...

  6. 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)

    本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...

  7. 算法与数据结构(七) AOV网的拓扑排序

    今天博客的内容依然与图有关,今天博客的主题是关于拓扑排序的.拓扑排序是基于AOV网的,关于AOV网的概念,我想引用下方这句话来介绍: AOV网:在现代化管理中,人们常用有向图来描述和分析一项工程的计划 ...

  8. 使用po模式读取豆瓣读书最受关注的书籍,取出标题、评分、评论、题材 按评分从小到大排序并输出到txt文件中

    #coding=utf-8from time import sleepimport unittestfrom selenium import webdriverfrom selenium.webdri ...

  9. javascript排序

    利用array中的sort()排序 w3cfunction sortNumber(a,b) { return a - b } var arr = new Array(6) arr[0] = " ...

随机推荐

  1. MyEclipe 配置 ivy 插件

    在 MyEclipse 装插件绝对不是技术的问题.只要你有足够的耐心和时间. 经过两次试验,在 MyEclipse 配置插件大概流程如下. 配置ivy:   1.打开配置中心     2.选择[Sof ...

  2. Android基于XMPP Smack Openfire下学习开发IM(六)总结

    不管学习什么都应该总结 这里我把关于Xmpp的一些方法整理到一个工具类中了 我就分享给大家 XmppConnection.java package com.techrare.utils; import ...

  3. ubuntu 安装软件(apt源)

    最近使用docker 构建python3的环境: 进入容器发现 连个vi命令多没有... 1.安装一个呗: apt-get 报错:root@22f41d59e3b2:~# apt-get instal ...

  4. CodeForces - 269C Flawed Flow

    http://codeforces.com/problemset/problem/269/C 题目大意: 给定一个边没有定向的无法增广的残量网络且1是源点,n是汇点,给定每条边中的流.  让你把所有边 ...

  5. 大型Web应用运行时 PHP负载均衡指南

    如今,“大型服务器”模式的时代已经过去,我们在运行一些大的Web应用时候,可以使用各种各样的负载均衡技术,这是一种更可行的方法,将使硬件成本降至最低. 过去当运行一个大的web应用时候意味着需要运行一 ...

  6. JavaScript实现遮罩层

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. C# 动态创建出来的窗体间的通讯 delegate3

    附件1:http://files.cnblogs.com/xe2011/CSharp_WindowsForms_delegate03.rar 一个RTF文件管理器 描述 Form2,Form3,For ...

  8. ActivityGroup相关--getLocalActivityManager()

    ActivityGroup简介 1.ActivityGroup的核心就是继承了该类,能够通过getLocalActivityManager()得到一个LocalActivityManager 如,Lo ...

  9. Android实战技巧之六:PreferenceActivity使用详解

    一.写作前面 当我们做应用的时候,需要用户配置一些信息,而这就是通常所说的应用设置. 对于Android系统来说,系统本身的设置带来的用户体验和习惯已经深入人心,在我们的应用中同样用到类似的设置页, ...

  10. windows修改mysql默认字符集不成功

    今天下午弄了半天,终于把mysql的默认字符集弄成了, 按照网上的说法,什么修改mysql下面的my.ini文件,把参数设置成utf-8,我反复操作,结果都是不成功,后来我把mysql5.0卸载了,网 ...