折半插入排序算法
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 20//顺序表长度
typedef int KeyType;
typedef struct
{
KeyType Key;
}RcdType;
typedef struct
{
RcdType r[MAXSIZE+1];
int length;
}SqList;
void InitList(SqList &L)
{
int len;
printf("顺序表长度为:\t");
scanf("%d",&len);
L.length=len;
for(int i=1;i<=L.length;i++)
{
printf("第%d个元素为:\t",i);
scanf(" %d",&L.r[i].Key);
}
}
void BInsertSort(SqList &L)
{
for(int i=2;i<=L.length;i++)
{
L.r[0]=L.r[i];
int low=1,high=i-1;
while(low<=high)
{
int m=(low+high)/2;
if(L.r[0].Key<L.r[m].Key) high=m-1;
else low=m+1;
}
for(int j=i-1;j>=low;j--)
L.r[j+1]=L.r[j];
L.r[low]=L.r[0];
}
}
void ShowList(SqList L)
{
for(int i=1;i<=L.length;i++)
{
printf("%d\t",L.r[i].Key);
}
}
int main()
{
SqList L;
InitList(L);
BInsertSort(L);
ShowList(L);
return 0;
}
运行结果: