注:从arr[1]开始排序
#include<iostream>
using namespace std;
void BInsertSort(int arr[], int n){
int i,j,low,height,mid;
for(i=2;i<=n;i++){
if(arr[i]<arr[i-1]){
arr[0] = arr[i];
low = 1,height = i-1;
while(low<=height){
mid = low+(height-low)/2;
if(arr[mid]>arr[0]) height = mid-1;
else low = mid+1;
}
for(j=i-1;j>height;j--){
arr[j+1]=arr[j];
}
arr[j+1] = arr[0];
}
}
}
void printArray(int arr[] ,int n)
{
int i;
for(i = 1; i <= n; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main(){
int n;
cin>>n;
int arr[n+1];
for(int i=1;i<=n;i++){
cin>>arr[i];
}
BInsertSort(arr,n);
printArray(arr,n);
return 0;
}