二分插入排序,顾名思义,利用二分来完成排序
思路:假设前面所有元素已经排好顺序,本次要插入的元素大小为tmp,在前面已经排好顺序的所有元素中 利用二分找到大于tmp的第一个元素 假设位置为 k ,将 k 后面的所有元素向后移动一位,再将b[k]直接赋值为tmp,这些操作进行n次即可
图示:
利用二分找到大于tmp的第一个元素
代码实现:
#includeusing namespace std; const int N=1000010; int a[N],n,b[N]; void f(int x,int tmp){ int l=1,r=tmp; while(l >1; if(b[mid]>=x) r=mid; else l=mid+1; } for(int i=tmp+1;i>l;i--) b[i]=b[i-1]; b[l]=x; } int main(){ ios::sync_with_stdio(false); cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; b[1]=0x3f3f3f3f; for(int i=1;i<=n;i++){ f(a[i],i); } for(int i=1;i<=n;i++) cout< 二分可以看这个以前的博客传送门



