编写一个插入排序算法程序,按升序对序列 A 进行排序。 该算法应基于以下伪代码:
for i = 1 to A.length-1 key = A[i] /* insert A[i] into the sorted sequence A[0,...,j-1] */ j = i - 1 while j >= 0 and A[j] > key A[j+1] = A[j] j-- A[j+1] = key
请注意,数组元素的索引从0开始。
为了说明算法,您的程序应该跟踪每个步骤的中间结果。
输入
输入的第一行包括一个整数 N,即序列中元素的数量。
在第二行中,序列的 N 个元素由单个空格分隔。
输出
输出由 N 行组成。请为每一步输出一行表示当前序列。序列的元素应由单个空格分隔。
约束
1 ≤ N ≤ 100
输入样例
6 5 2 4 6 1 3
输出样例
5 2 4 6 1 3 2 5 4 6 1 3 2 4 5 6 1 3 2 4 5 6 1 3 1 2 4 5 6 3 1 2 3 4 5 6
#include <iostream>
#include <cstring>
using namespace std;
int n, A[100];
void print() {
for (int i = 0; i < n; i++) {
cout << A[i];
if (i != n - 1) cout << ' ';
}
cout << endl;
}
void insertionSort(int A[], int N) {
for (int i = 1; i < N; i++) {
int v = A[i], j = i - 1;
while (j >= 0 && A[j] > v) {
A[j + 1] = A[j];
j--;
}
A[j + 1] = v;
print();
}
}
int main() {
cin >> n;
memset(A, 0, sizeof(A));
for (int i = 0; i < n; i++)
cin >> A[i];
print();
insertionSort(A, n);
return 0;
}