问题描述
日期和文件大小对文件进行排序,排序规则为:
- 日期优先,最后修改的排在前面
- 当修改日期相同时,大的文件排在前面。
输入说明
第一行为一个数字 n,n 表示共有 n 个待排序的文件, 1≤ n≤ 100。
接下来是 n 行,每行包含一个文件的修改日期和文件大小,这两个字段之间用空格分隔。
文件修改日期包含年、月、日,表示年、月、日的整数之间用“/”分隔,格式为“年/月/
日”。年份的数值在 1960-2018 之间;月份的数值在 1-12 之间;日的数值在 1-31 之间。
文件大小是一个不超过 100000000 的整数。
输入数据中没有完全相同的日期和文件大小。
输出说明
将输入数据按题目描述的规则排序后输出,每行输出一个文件的修改日期和文件大小。
输入样例
8
2018/1/8 1024
2012/10/31 256
2014/10/29 300
2012/10/31 457
2014/10/27 512
2011/10/27 95
2014/11/3 1102
2017/11/24 1535
输出样例
2018/1/8 1024
2017/11/24 1535
2014/11/3 1102
2014/10/29 300
2014/10/27 512
2012/10/31 457
2012/10/31 256
2011/10/27 95
#include <stdio.h>
//169.结构体之文件排序
//定义结构体
typedef struct{
int year;
int month;
int day;
int bit;
}File;
void sort(File file[],int n){
int i,j;
//先排序bit
for(i=1;i<n;i++){
for(j=0;j<n-i;j++){
if(file[j].bit<file[j+1].bit){
File f=file[j];
file[j]=file[j+1];
file[j+1]=f;
}
}
}
//排序日子
for(i=1;i<n;i++){
for(j=0;j<n-i;j++){
if(file[j].day<file[j+1].day){
File f=file[j];
file[j]=file[j+1];
file[j+1]=f;
}
}
}
//排序月份
for(i=1;i<n;i++){
for(j=0;j<n-i;j++){
if(file[j].month<file[j+1].month){
File f=file[j];
file[j]=file[j+1];
file[j+1]=f;
}
}
}
//排序年份
for(i=1;i<n;i++){
for(j=0;j<n-i;j++){
if(file[j].year<file[j+1].year){
File f=file[j];
file[j]=file[j+1];
file[j+1]=f;
}
}
}
}
int main (){
int n;
scanf("%d",&n);
//定义结构体变量
File file[50];
//赋值
int i;
for(i=0;i<n;i++){
scanf("%d/%d/%d %d",&file[i].year,&file[i].month,&file[i].day,&file[i].bit);
}
//排序
sort(file,n);
// printf("\n");
//打印输出
for(i=0;i<n;i++){
printf("%d/%d/%d %d\n",file[i].year,file[i].month,file[i].day,file[i].bit);
}
return 0;
}