### 思路
1. **直接插入排序**:从第二个元素开始,将每个元素插入到前面已经排好序的子序列中。
2. **输出每趟排序结果**:在每次插入操作后,输出当前数组的状态。
### 伪代码
1. **直接插入排序**
```
function insertion_sort(arr):
for i from 1 to length(arr) - 1:
key = arr[i]
j = i - 1
while j >= 0 and arr[j] > key:
arr[j + 1] = arr[j]
j = j - 1
arr[j + 1] = key
print_array(arr)
```
2. **打印数组**
```
function print_array(arr):
for each element in arr:
print(element, end=" ")
print()
```
### C++代码
#include <iostream>
#include <vector>
using namespace std;void print_array(const vector<int>& arr) {for (int num : arr) {cout << num << " ";}cout << endl;
}void insertion_sort(vector<int>& arr) {int n = arr.size();for (int i = 1; i < n; ++i) {int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j = j - 1;}arr[j + 1] = key;print_array(arr);}
}int main() {int n;cin >> n;vector<int> arr(n);for (int i = 0; i < n; ++i) {cin >> arr[i];}insertion_sort(arr);return 0;
}
### 总结
- **直接插入排序**:通过逐步将每个元素插入到已排序的子序列中,完成排序。
- **输出每趟排序结果**:在每次插入操作后,输出当前数组的状态,便于观察排序过程。