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

Linux C 實戰:冒泡排序算法完整實現與編譯運行指南

     編輯:關於C語言

算法思路回顧

冒泡排序通過兩層嵌套循環,重複比較相鄰元素並交換,將大元素像氣泡一樣“浮”到數組末端。本文採用指針算術訪問數組元素,展示 C 語言底層操作特色。

完整源碼 BubbleSort.c


#include 
#include 

/* 冒泡排序:升序
 * pArr: 數組首地址
 * cnt:  元素個數
 */
void bubbleSort(int *pArr, int cnt) {
    int i, j, tmp;
    for (i = 0; i < cnt; i++) {
        for (j = i + 1; j < cnt; j++) {
            if (*(pArr + i) > *(pArr + j)) { // 指針算術等價於 pArr[i] > pArr[j]
                tmp = *(pArr + i);
                *(pArr + i) = *(pArr + j);
                *(pArr + j) = tmp;
            }
        }
    }
}

int main(void) {
    int cnt;
    printf("input array length:\n");
    if (scanf("%d", &cnt) != 1 || cnt < 1) {
        printf("array length must be larger 0\n");
        return 1;
    }
    printf("array length is %d\n", cnt);

    // C99 變長數組 (VLA),或用 malloc 動態分配
    int a[cnt]; 
    int i;
    for (i = 0; i < cnt; i++) {
        printf("input arr[%d] value\n", i);
        scanf("%d", &a[i]);
    }

    bubbleSort(a, cnt);

    printf("bubblesort result:\n");
    for (i = 0; i < cnt; i++) {
        printf("%d ", a[i]);
    }
    printf("\n");
    return 0;
}

編譯與運行


$ gcc -o BubbleSort BubbleSort.c -std=c99 -Wall
$ ./BubbleSort
input array length:
3
array length is 3
input arr[0] value
2
input arr[1] value
1
input arr[2] value
4
bubblesort result:
1 2 4

代碼亮點與改進建議

  • 指針算術:*(pArr + i) 體現指針與數組下標的等價性。
  • VLA 使用:int a[cnt] 簡化了動態內存管理,但棧空間有限,大數組建議 malloc/free。
  • 輸入校驗:檢查 scanf 返回值與 cnt 合法性。
  • 優化方向:增加“已有序提前退出”標誌位;內層循環上界可優化為 cnt - 1 - i(標準冒泡寫法)。
動手重寫經典算法是鞏固 C 語言指針、內存、控制流的最佳途徑。堅持練習,必有收穫!
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved