- #include <stdio.h>
- #include <stdlib.h>
- void pr_arr(int a[],int len)
- {
- int i=0;
- for(i=0;i<len;++i)
- {
- printf("%d ",a[i]);
- }
- printf("\n");
- }
- //查找插入的位置
- int bFindToInsert(int *arr,int len,int key)
- {
- int low=0,high=len-1,mid;
- while(low <= high)
- {
- mid=(high+low) >> 1;
- if(key >= arr[mid])
- {
- low=mid+1;
- }
- else high=mid-1;
- }
- return low;
- }
- //binary insert sort
- void bInsertSort(int *s,int len)
- {
- int i,k,t,bi;
- for(i=1;i<len;++i)
- {
- t=s[i];
- bi=bFindToInsert(s,i,s[i]);
- for(k=i-1;k>=bi;--k)
- {
- s[k+1]=s[k];
- }
- s[bi]=t;
- }
- }
- int main(void) {
- int a[] ={ 2, 1, 3, 324, 2, 34, 44, 5, 7, 8 };
- int len = sizeof(a) / sizeof(int);
- bInsertSort(a, len);
- pr_arr(a, len);
- return 0;
- }