標題「冒泡排序」,但輸出範例顯示:每輪將**最小值交換到前端**,屬於選擇排序過程。
// 冒泡排序 (大元素沉底)
輪1: 36 48 68 12 48 2 | 72
輪2: 36 48 12 48 2 | 68 72
// 選擇排序 (小元素浮頂) — 題目要求
輪1: 2 48 68 72 12 48 | 36
輪2: 2 12 68 72 48 | 36 48
...
最終: 2 12 36 48 48 68 72
#include <stdio.h>
#define N 400
void printArray(int a[], int n, const char* prefix) {
printf("%s(", prefix);
for (int i = 0; i < n; i++) {
if (i) printf(" ");
printf("%d", a[i]);
}
printf(")\n");
}
int main() {
int n, a[N];
scanf("%d", &n);
for (int i = 0; i < n; i++) scanf("%d", &a[i]);
printArray(a, n, "Source:");
printf("Bubble Sort:\n"); // 題目要求輸出這行
for (int i = 0; i < n - 1; i++) {
int minIdx = i;
for (int j = i + 1; j < n; j++)
if (a[j] < a[minIdx]) minIdx = j;
if (minIdx != i) {
int tmp = a[i]; a[i] = a[minIdx]; a[minIdx] = tmp;
}
// 輸出當前狀態:已排序部分 + 未排序部分
printf("(");
for (int k = 0; k < n; k++) {
if (k) printf(" ");
printf("%d", a[k]);
}
printf(")\n");
}
printArray(a, n, "Result");
return 0;
}
Source: (48 36 68 72 12 48 2)Bubble Sort: 後每行一個完整數組狀態,括號包裹,空格分隔。Result (2 12 36 48 48 68 72)printf 而非 cout 避免同步開銷超時。