#include "stdio.h" #include "malloc.h" typedef int KeyType; typedef int DataType; typedef struct { //排序码字段 KeyType key; //记录的其他字段 DataType info; }RecordNode; typedef struct { int n; RecordNode * record; }SortObject; void binSort(SortObject * pvector) { int i,j,left,right,middle; RecordNode temp; for(i=0;i<pvector->n;i++) { temp=pvector->record[i]; left=0; right=i-1; while (left<=right) { middle=(left+right)>>1; if (temp.key<pvector->record[middle].key) { right=middle-1; } else { left=middle+1; } } for(j=i-1;j>=left;j--) { pvector->record[j+1]=pvector->record[j]; } if (left!=i) { pvector->record[left]=temp; } } for(i=0;i<pvector->n;i++) { printf("%d ",pvector->record[i]); } } int main(int argv ,char * argm[]) { int i,j=0,l,p; SortObject * object=(SortObject *)malloc(sizeof(SortObject)); RecordNode * node=(RecordNode *)malloc(sizeof(RecordNode)); printf("请输入数组的长度 \n"); scanf("%d",&i); p=i; while (i>0) { printf("请输入数组的字段 \n"); scanf("%d",&l); node[j].key=l; j++; i--; } object->record=node; object->n=p; binSort(object); return 1; }
结果:
当n较大时,显然比直接插入排序的最大比较次数少的多。但大于直接插入排序的最小比较次数。移动次数,最坏的情况为n²/2,最好的情况为n-1,平均移动次数为O(n²).算法中增加了一个辅助空间temp,因此,算法的辅助空间为S(n)=O(1)。二分法插入排序是稳定的。
来源:https://www.cnblogs.com/yucong/archive/2012/05/17/2506945.html