c语言结构体冒泡排序,C语言用结构体和冒泡排序完成日期排序

#include

struct data//该结构体存储输入的年月日

{

int y;

int m;

int d;

};

struct y_equals//该结构体用于存储年从小到大后相同年份的开始下标和结束下标

{

int head;

int end;

};

int main()

{

int o=0;

int z=1;

int p,q;

int equals;

int head,end;

int ye=0;//表示有多少种相同的年份

struct y_equals y_e[50]={0};//该结构体数组用于存储有多少种相同的年份,比如1999,1999,2000,2000,就有两种相同的年份

int b[50]={0},bb=0;

struct data k;

int j=0,i,m;

struct data a[100];

while(~scanf("%d%*c%d%*c%d",&a[j].m,&a[j].d,&a[j].y))j++;

for(i=0;i

{

for(m=i+1;m

{

if(a[m].y

{

k=a[m];

a[m]=a[i];

a[i]=k;

}

}

}

equals=a[0].y;

for(i=1;i

{

if(a[i].y==equals)

{

o=1;//把1赋值给o表示有相同的年份,

if(z==1)//z为1时,y_e开始接纳第一个相同年份的下标

y_e[ye].head=i-1,z=0; //把0赋值给z,说明即便后面的年份相同并且不会改变第一个相同年份的下标

if(i==j-1 && z==0)//当i为最后一组年月日并且z为0,即可能所有的年份都相同,这是就要把i赋值给y_e[ye].end,否则end没有赋值就会出错

{

ye+=1;

y_e[ye].end=i;//因为复制任务都是判断到年份与前一个年份不相同的时候再把该年份的下标赋值给end,该if语句用来防止输入的年份全相同时end没有赋值,引发错误

}

}

else

{

if(o==1)//o等于1表示前面有过相同的年份,o表示0则表示前面没有一个年份相同

{

o=0;

y_e[ye++].end=i-1;

equals=a[i].y; z=1;//说明年份不相同,把1赋值给z,这样就可以将新的年份输入到结构体y_e中

}

else

{equals=a[i].y; z=1;}

}

}

for(i=0;i

{

for(p=y_e[i].head;p<=y_e[i].end-1;p++)

{

for(q=p+1;q<=y_e[i].end;q++)

{

if(a[p].m>a[q].m)

{

k=a[p];

a[p]=a[q];

a[q]=k;

}

}

}

}

//以下就是年份和月份都排好序了,最后再给天数排序,在排序的时候要注意年份和月份都要相同

head=0;

for(i=1;i

{

if(a[i].y==a[head].y && a[head].m==a[i].m && i

continue;

else

{

for(p=head;p

{

for(q=p+1;q<=i-1;q++)

{

if(a[p].d>a[q].d)

{

k=a[p];

a[p]=a[q];

a[q]=k;

}

}

}

head=i;

}

}

for(i=0;i

{

if(a[i].m/10==0)

printf("0%d/%d/%d\n",a[i].m,a[i].d,a[i].y);

else

printf("%d/%d/%d\n",a[i].m,a[i].d,a[i].y);

}

return 0;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值