- #include <bits/stdc++.h>
- //#include <iostream>
- //#include <vector>
- using namespace std;
- void printArray(const vector<int>& arr) {
- for (size_t i = 0; i < arr.size(); i++) {
- cout << arr[i] << (i == arr.size() - 1 ? "\n" : " ");
- }
- }
- void bubbleSort(vector<int>& arr) {
- int n = arr.size();
- bool swapped;
-
- for (int i = 0; i < n - 1; i++) {
- swapped = false;
- for (int j = 0; j < n - 1 - i; j++) {
- if (arr[j] > arr[j + 1]) {
- swap(arr[j], arr[j + 1]);
- swapped = true;
- }
- }
- if (!swapped) break; // 若無交換則提前結束
- printArray(arr); // 每次排序後輸出
- }
- }
- int main() {
- int N;
- cin >> N;
- vector<int> arr(N);
-
- for (int i = 0; i < N; i++) {
- cin >> arr[i];
- }
-
- printArray(arr); // 輸出原始數列
- bubbleSort(arr);
-
- return 0;
- }
複製代碼 回復 1# may
-----------------------------------------------------------------------------
程式碼說明
輸入處理
讀取一個正整數 N(代表數列長度)。
讀取 N 個整數,存入 vector<int> 容器 arr 中。
氣泡排序(Bubble Sort)
外層迴圈控制 n-1 次排序。
內層迴圈比較相鄰兩數,若前者大於後者則交換。
若某次迴圈沒有發生交換,代表數列已排序完成,提前結束排序。
輸出
先輸出原始數列。
每次排序後輸出當前數列狀態。
若數列已經排序,則只輸出原始數列。
-----------------------------------------------
測資:
測資00:隨機數列
輸入
5
8 3 7 1 5
輸出
8 3 7 1 5
3 7 1 5 8
3 1 5 7 8
1 3 5 7 8
測資01:完全遞增(最佳情況,不需排序)
輸入
6
2 4 6 8 10 12
輸出
2 4 6 8 10 12
測資 02:完全遞減(最差情況,需要完整排序)
輸入
4
9 7 5 3
輸出
9 7 5 3
7 5 3 9
5 3 7 9
3 5 7 9
測資 03:含有重複數字
輸入
7
4 2 6 2 8 4 1
輸出
4 2 6 2 8 4 1
2 4 2 6 4 1 8
2 2 4 4 1 6 8
2 2 4 1 4 6 8
2 2 1 4 4 6 8
2 1 2 4 4 6 8
1 2 2 4 4 6 8
測資04:所有數字相同
輸入
5
5 5 5 5 5
輸出
5 5 5 5 5
這些測資涵蓋了 隨機數列、已排序數列、反向排序數列、含有重複數字的數列、全相同數字的數列,可幫助測試程式在不同情境下的表現。 |