转自:https://blog.csdn.net/zhangxiangdavaid/article/details/27958143
#include <bits/stdc++.h>
using namespace std;
const int maxn=505;
int a[maxn],b[maxn];
void insert_sort(int n){
int f=0;
int l=0;
b[0]=a[0];
for(int i=1;i<n;i++){
if(a[i]<b[f]){
f=(f-1+n)%n;
b[f]=a[i];
}
else if(a[i]>=b[l]){
l++;
b[l]=a[i];
}
else{
int low=f,high=l;
while(low!=high){
int no=(high-low+n)%n;
int mid=(low+no/2)%n;
if(a[i]<b[mid]){
high=mid;
}
else{
low=(mid+1)%n;
}
}
for(int j=l+1;j!=low;j=(j-1+n)%n){
b[j]=b[(j-1+n)%n];
}
b[low]=a[i];
l++;
}
}
for(int i=0;i<n;i++){
a[i]=b[(i+f)%n];
}
for(int i=0;i<n;i++){
cout<<a[i]<<' ';
}
cout<<endl;
}
int main(){
int n;
while(cin>>n){
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0;i<n;i++){
cin>>a[i];
}
insert_sort(n);
}
return 0;
}