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

我的 C 語言排序算法演示程序:菜單驅動的多種排序實現框架

     編輯:關於C語言

項目概述

這是一個基於控制台菜單的排序算法演示框架,支持插入排序(直接/希爾)、選擇排序(簡單/樹形/堆)、快速排序、歸並排序等多種算法的選擇與展示。雖然核心排序邏輯未填充(僅打印標題),但菜單架構、輸入處理、模塊化設計值得初學者參考。

代碼架構分析

1. 模塊化設計

  • myprint_0():主菜單顯示
  • myprint_a():插入排序子菜單
  • myprint_c():選擇排序子菜單
  • inputmyprint_1/a/c():對應子菜單的輸入處理與分發

採用函數指針/分發表思想的雛形,將菜單顯示、輸入處理、業務邏輯分離。

2. 輸入處理細節


char Choic = getchar(); // 讀取首字符
// 注意:getchar() 留下換行符,後續 scanf("%c") 會讀到換行符
// 建議:scanf(" %c", &c) 跳過空白字符,或用 getchar() 循環清理緩衝區

3. 代碼規範問題

  • main() 缺少返回類型 int(C99 前隱式 int,現代標準必須顯式)
  • 大量重複的 printf 邊框代碼,應封裝為 PrintMenu(const char* title, const char* options[])
  • 排序算法實現缺失,僅有框架
  • 變量命名不規範(Choic, Choic_1, Choic_a, Choic_c)

補全排序算法實現建議

直接插入排序


void InsertSort(int *a, int n) {
    for (int i=1; i=0 && a[j] > key) a[j+1] = a[j--];
        a[j+1] = key;
    }
}

希爾排序


void ShellSort(int *a, int n) {
    for (int gap=n/2; gap>0; gap/=2)
        for (int i=gap; i=0 && a[j]>key) a[j+gap]=a[j], j-=gap;
            a[j+gap]=key;
        }
}

快速排序


void QuickSort(int *a, int l, int r) {
    if (l>=r) return;
    int i=l, j=r, pivot=a[l];
    while (i=pivot) j--;
        if (i

歸並排序


void MergeSort(int *a, int l, int r, int *tmp) {
    if (l>=r) return;
    int mid=(l+r)/2;
    MergeSort(a, l, mid, tmp);
    MergeSort(a, mid+1, r, tmp);
    int i=l, j=mid+1, k=l;
    while (i<=mid && j<=r) tmp[k++] = a[i]<=a[j] ? a[i++] : a[j++];
    while (i<=mid) tmp[k++] = a[i++];
    while (j<=r) tmp[k++] = a[j++];
    for (i=l; i<=r; i++) a[i]=tmp[i];
}

改進版菜單框架(現代 C 風格)


typedef void (*SortFunc)(int*, int);
struct MenuItem { char key; const char* desc; SortFunc func; };

void RunMenu(struct MenuItem* items, int count) {
    while (1) {
        PrintMenu(items, count);
        char c = GetChoice();
        if (c=='q') break;
        for (int i=0; i

總結

這個「敗作」實際是很好的練習項目。通過補全算法、重構菜單系統、添加隨機數據生成、性能計時對比、可視化輸出,可進化為完整的《排序算法教學演示軟件》,極大鞏固算法與工程能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved