#include<stdio.h> #include<stdlib.h> //二分插入排序法 void BinsertSort(int a[],int n){ int low,high,mid; int i,j,temp; for(i=0;i<n;i++){ printf("%d ",a[i]); } for(i=1;i<n;i++){ low=0; high=i-1; temp=a[i]; mid=(low+high)/2; while(low<=high){//利用二分法寻找应该插入的位置,其他同一般插入排序法 if(temp<=a[mid]){ high=mid-1; }else{ low=mid+1; } } for(j=i-1;j>=high+1;j--){//high+1也要yi走,让其闲置 a[j+1]=a[j]; } a[j]=temp; } for(i=0;i<n;i++){ printf("%d ",a[i]); } } void main(){ int a[10]={5,1,2,4,5,27,5,78,45,56}; BinsertSort(a,10);