插入排序的最大复杂度为O(n^2);
代码:
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
void Output(int A[],int n)
{
for(int i=0;i<n;i++)
printf("%d%c",A[i],i==n-1?'\n':' ');
}
void Sort(int A[],int n)
{
int j,i,v;
for(int i=1;i<n;i++)
{
v = A[i];
j = i-1; //A[i]后面的值,如图A[3]
while( j>=0 && A[j]>v ) //当小于等于v的时候停止,如图A[0]
{
A[j+1] = A[j];
j--; //从i-1向前自减
}
A[j+1] = v; //在此之前,通过j--,了如图j==0的时候,所以A[i+1]=v
Output(A,n);
}
}
int main()
{
int n;
int A[105];
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&A[i]);
for(int i=0;i<n;i++)
printf("%d%c",A[i],i==n-1?'\n':' ');
Sort(A,n);
return 0;
}
/*
输入:
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
*/