c语言描述的二分插入排序法

#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);

 

posted @ 2016-07-27 10:54  风雨缠舟  阅读(1877)  评论(0编辑  收藏  举报