1. 程式人生 > >結構體陣列排序 (學生資訊 按成績排序 )

結構體陣列排序 (學生資訊 按成績排序 )

/*
name:學生資訊結構體  按總分排序 (降序)
*/


#include<stdio.h>
typedef struct{//結構體 定義時儘量放main()外面---方便 
int grade;
int age;
char name[10];/*其他資訊就不列舉了*/
}Student; 


int main()
{   int i,j;
Student temp;

Student student[3]={/*分成多條初始化--- 清晰*/ 
{600,18,"小明"},
{550,19,"小紅"},
{700,20,"tom"},
} ;

  /*用結構體指標---提高效率*/
  /*氣泡排序*/
  
Student* p=student;
for(i=1;i<=2;i++)
{
for(j=0;j<=3-i-1;j++)//大-->小 
{
if( (p+j)->grade  <  (p+j+1)->grade)
{
  temp=*(p+j);
   *(p+j) = *(p+j+1);
   *(p+j+1)= temp;//注意 temp 的型別為Student 

/*
temp=(p+j)->grade;
   (p+j)->grade = (p+j+1)->grade;
   (p+j+1)->grade = temp;
      錯誤程式碼 why? 注意 整體交換 
*/
}
}
}

/*以表的形式輸出*/
printf("姓名    年齡    分數  \n\n");//表頭 
for(i=0;i<=2;i++)
{
printf("%-4s   %4d     %4d\n",(p+i)->name,(p+i)->age,(p+i)->grade); 
}

getchar();
return 0; 
}