### 思路
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;
}
### 总结
- **直接插入排序**:通过逐步将每个元素插入到已排序的子序列中,完成排序。
- **输出每趟排序结果**:在每次插入操作后,输出当前数组的状态,便于观察排序过程。