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

C語言冒泡排序實現:隨機陣列生成與排序過程可視化

     編輯:關於C語言

C語言冒泡排序實現:隨機陣列生成與排序過程可視化

冒泡排序核心:相鄰元素兩兩比較,大的往後「冒泡」,每輪將當前最大值移至末尾。

代碼實現

#include <stdio.h>
#include <stdlib.h>
#define RANDOM(x) (rand() % (x))

int main() {
    int arr[100];
    printf("原始陣列:\n");
    for (int i = 0; i < 100; i++) {
        arr[i] = RANDOM(100);
        printf("%d ", arr[i]);
    }
    printf("\n排序中...\n");

    // 冒泡排序
    for (int i = 0; i < 100; i++) {
        for (int j = 99; j > i; j--) { // 內層從後向前
            if (arr[j] < arr[j-1]) {
                int t = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = t;
            }
        }
        printf("%d ", arr[i]); // 每輪輸出當前最小值
    }
    printf("\n");
    return 0;
}

關鍵點解析

  • 外層 i 表示已排序區邊界,內層 j 從末尾向前掃描。
  • 每輪結束時 arr[i] 為第 i+1 小元素,故可即時輸出觀察過程。
  • 時間複雜度 O(n²),適合教學與小規模數據(n < 50)。

優化版:早期退出

for (int i = 0; i < n-1; i++) {
    int swapped = 0;
    for (int j = 0; j < n-1-i; j++)
        if (arr[j] > arr[j+1]) { swap; swapped = 1; }
    if (!swapped) break; // 本輪無交換,已有序
}

學習資源推薦

  • 《演算法圖解》(Aditya Bhargava)— 圖解冒泡、選擇、插入、快排。
  • Visualgo.net — 線上演算法動畫演示。
  • LeetCode 排序專題 — 實戰練習。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved