示範結構體陣列針對特定欄位 (`score`) 進行冒泡排序,含優化旗標提前結束。
typedef struct {
char *name;
int sno;
int age;
float score;
} Student;
void sortScore(Student st[], int len) {
int flag;
for (int i = 0; i < len - 1; i++) {
flag = 1;
for (int j = 0; j < len - 1 - i; j++) {
if (st[j].score > st[j+1].score) {
Student tmp = st[j];
st[j] = st[j+1];
st[j+1] = tmp;
flag = 0;
}
}
if (flag) break; /* 本輪無交換,已有序 */
}
}
void printStudent(Student stu[], int len) {
for (int i = 0; i < len; i++)
printf("name:%s sno:%d age:%d score:%.1f\n",
stu[i].name, stu[i].sno, stu[i].age, stu[i].score);
}
int main() {
Student stu[3] = {{"Tom", 1101, 18, 99.2},
{"Boy", 1102, 20, 98.1},
{"Smith", 1103, 22, 99.0}};
sortScore(stu, 3);
printStudent(stu, 3);
return 0;
}
name:Boy sno:1102 age:20 score:98.1
name:Smith sno:1103 age:22 score:99.0
name:Tom sno:1101 age:18 score:99.2