習題9-5 通訊錄排序 (20分)

許永亮發表於2020-09-24
#include <stdio.h>
#include <string.h>
typedef struct people{
    char name[100];
    long bd;
    char tel[100];
}p;//定義結構型別並重新命名
int main()
{
    int n,i,j;
    long temp;//臨時變數
    char c[100];//臨時字元陣列
    scanf("%d",&n);
    p p1[n];//結構陣列
    for(i=0;i<n;i++)
    {
        scanf("%s %ld %s",&p1[i].name,&p1[i].bd,&p1[i].tel);
    }//輸入
    for (i=0; i<n-1; i++) /* 外迴圈為排序趟數,len個數進行len-1趟 */
        for (j=0; j<n-1-i; j++) { /* 內迴圈為每趟比較的次數,第i趟比較len-i次 */
            if (p1[j].bd>p1[j+1].bd) { /* 相鄰元素比較,若逆序則交換(升序為左大於右,降序反之) */
                temp = p1[j].bd;
                p1[j].bd = p1[j+1].bd;
                p1[j+1].bd = temp;//生日排序
                strcpy(c,p1[j].name);
                strcpy(p1[j].name,p1[j+1].name);
                strcpy(p1[j+1].name,c);//名字跟著生日排序
                strcpy(c,p1[j].tel);
                strcpy(p1[j].tel,p1[j+1].tel);
                strcpy(p1[j+1].tel,c);//電話跟著生日排序
            }
        }//氣泡排序
	for(i=0;i<n;i++)
	    {
	        printf("%s %ld %s\n",p1[i].name,p1[i].bd,p1[i].tel);
	    }//輸出
	    return 0; 
}

相關文章