折半插入排序
#include<stdio.h>
#define MAXSIZE 20
typedef int ElemType;
//折半插入排序
void InsertSort(ElemType A[], int n){
int low,high,mid;
for(int i=2;i<=n;i++){ //依次将A[2]~A[n]插入前面的已排序序列
A[0]=A[i]; //将A[i]暂存到A[0]
low=1;
high=i-1; //折半查找的范围
while(low<=high){
mid=(low+high)/2;
if(A[mid]>A[0]){
high=mid-1; //查找左半子表
}else{
low=mid+1; //查找右半子表
}
}
for(int j=i-1;j>=high+1;--j){//统一后移,空出插入位置
A[j+1]=A[j];
}
A[high+1]=A[0];
}
}
int main(){
int n;
int A[MAXSIZE];
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&A[i]);
}
InsertSort(A,n);
for(int i=1;i<=n;i++){
printf("%d ",A[i]);
}
return 0;
}