首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言結構體陣列排序:依成績欄位遞增冒泡排序

     編輯:關於C語言

前言

示範結構體陣列針對特定欄位 (`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

擴充建議

  • 改用 `qsort` + 比較函數,通用且效能 O(n log n)。
  • 支援多欄位排序 (先按 score,再按 age)。
  • 結構體含指標成員時需深拷貝或僅交換指標。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved