冒泡排序核心:相鄰元素兩兩比較,大的往後「冒泡」,每輪將當前最大值移至末尾。
#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; // 本輪無交換,已有序
}