请帮我分析下 排序函数代码片段 逻辑是不是有问题,为什么输出排序结果不对
谢谢!
#include<stdio.h>
#define PERSON 5
//函数原型
void input_info();
void add_sort();
struct birthday{
int year;
int month;
int day;
};
typedef struct address_book{
char name[10];
struct birthday bir;
int phone;
}ADD;
//定义结构体变量
ADD add[PERSON]={{"zhang",{1994,3,20},111111},{"wang",{1994,2,20},222222},{"zhao",{1994,2,25},333333},{"cheng",{1993,3,30},444444},{"zhang",{1998,8,26},555555}},*p_add = add;
void main(){
printf("--------------------排序前----------------------\n");
for(;p_add < add +PERSON; p_add++){
printf("name:%s\nbirthday:%d-%d-%d\nphone:%d\n",p_add->name,p_add->bir.year,p_add->bir.month,p_add->bir.day,p_add->phone);
printf("========================\n");
}
printf("\n");
printf("--------------------排序后----------------------");
printf("\n");
//输入信息
//input_info();
add_sort();
for(;p_add < add +PERSON; p_add++){
printf("name:%s\nbirthday:%d-%d-%d\nphone:%d\n",p_add->name,p_add->bir.year,p_add->bir.month,p_add->bir.day,p_add->phone);
printf("========================\n");
}
}
//信息键入
void input_info(){
printf("Enter person infomation example:year-month-day/phone/name\n");
for(;p_add < add + PERSON;p_add++){
scanf("%d-%d-%d/%d/%s",&p_add->bir.year,&p_add->bir.month,&p_add->bir.day,&p_add->phone,p_add->name);
}
//指正复位
p_add = &add[0];
}
//按日期排序输出
void add_sort(){
ADD add_temp;
p_add = &add[0];
//冒泡排序 年 月日大-小
for(int i = 0; i < PERSON -1 ; i++){
p_add = &add[0];
for(int k = PERSON - 1 ; k > i ; k--){
if((p_add+k)->bir.year != (p_add+k-1)->bir.year && (p_add+k)->bir.year < (p_add+k-1)->bir.year){
add_temp = *(p_add+k);
*(p_add+k) = *(p_add+k-1);
*(p_add+k-1) = add_temp;
}else if((p_add+k)->bir.month != (p_add+k-1)->bir.month && (p_add+k)->bir.month < (p_add+k-1)->bir.month){
add_temp = *(p_add+k);
*(p_add+k) = *(p_add+k-1);
*(p_add+k-1) = add_temp;
}else if((p_add+k)->bir.day != (p_add+k-1)->bir.day && (p_add+k)->bir.day < (p_add+k-1)->bir.day){
add_temp = *(p_add+k);
*(p_add+k) = *(p_add+k-1);
*(p_add+k-1) = add_temp;
}
}
}
}