8638 直接插入排序

### 思路
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;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值