2.1 插入排序
纯翻译代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn=1000000;
ll n,A[maxn];
int main()
{
ll i,j,key;
scanf("%lld",&n);//n为数组长度
for(i=1;i<=n;i++)
scanf("%lld",&A[i]);
for(j=2;j<=n;j++)
{
key=A[j];
i=j-1;
while(i>0&&A[i]>key)
{
A[i+1]=A[i];
i=i-1;
}
A[i+1]=key;
}
printf("%lld",A[1]);
for(i=2;i<=n;i++)
printf(" %lld",A[i]);
return 0;
}
代码思路简述:
大循环逻辑:排序当前的一位数,从大到小的顺序排;
大循环时间复杂度o(n)
小循环逻辑:将这个数与前面一个数比大小,如果比它小,改变key值。
小循环时间复杂度o(n)
时间复杂度o(n^2)