編寫 C 語言程序,對 10 個整數進行冒泡排序,分別按升序和降序輸出結果。
通過參數 desc 控制排序方向:0 升序,1 降序。雙層循環比較相鄰元素,滿足條件即交換。
#include <stdio.h>
void bubbleSort(int *data, int n, int desc) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
// 升序:前大於後交換;降序:前小於後交換
if ((data[j] > data[j + 1] && !desc) || (data[j] < data[j + 1] && desc)) {
int temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
}
}
}
}
int main() {
int data[] = {3, 2, 3, 4, 1, 9, 5, 2, 6, 8};
int n = 10;
printf("原始數據: ");
for (int i = 0; i < n; i++) printf("%d ", data[i]);
printf("\n");
// 升序排序
bubbleSort(data, n, 0);
printf("升序結果: ");
for (int i = 0; i < n; i++) printf("%d ", data[i]);
printf("\n");
// 降序排序
bubbleSort(data, n, 1);
printf("降序結果: ");
for (int i = 0; i < n; i++) printf("%d ", data[i]);
printf("\n");
return 0;
}
bubbleSort 函數接收數組指針、長度、方向標誌,原地排序。n-1 趟,內層每趟減少一次比較(已排好序的元素沉底/浮頂)。main 中演示原始、升序、降序三次輸出。原始數據: 3 2 3 4 1 9 5 2 6 8
升序結果: 1 2 2 3 3 4 5 6 8 9
降序結果: 9 8 6 5 4 3 3 2 2 1