直接插入排序
void InsertSort(ElemType A[],int n)
{
int i,j;
for(i=2;i<=n;i++)
if(A[i]<A[i-1])
{
A[0]=A[i];
for(j=i-1;A[0]<A[j];--j)
A[j+1]=A[j];
A[j+1]=A[0];
}
}
折半插入排序
void BinInsertSort(int A[],int n)
{
int i,j,low,high,mid;
for(i=2;i<=n;i++)
{
A[0]=A[i];
low=1;high=i-1;
while(low<=high)
{
mid=(low+high)/2;
if(A[0]<A[mid])
high=mid-1;
else
low=mid+1;
}
for(j=i-1;j>=high+1;j--)
A[j+1]=A[j];
A[high+1]=A[0];
}
}
运行源程序代码
//————————————直接插入排序算法————————————//
void InsertSort(int A[],int n)
{
int i,j;
for(i=2;i<=n;i++)
if(A[i]<A[i-1])
{
A[0]=A[i];
for(j=i-1;A[0]<A[j];j--)
A[j+1]=A[j];
A[j+1]=A[0];
}
}
//————————————折半插入排序算法————————————//
void BinInsertSort(int A[],int n)
{
int i,j,low,high,mid;
for(i=2;i<=n;i++)
{
A[0]=A[i];
low=1;high=i-1;
while(low<=high)
{
mid=(low+high)/2;
if(A[0]<A[mid])
high=mid-1;
else
low=mid+1;
}
for(j=i-1;j>=high+1;j--)
A[j+1]=A[j];
A[high+1]=A[0];
}
}
void Disply(int A[],int n)
{
int i;
for(i=1;i<=n;i++)
printf("%d\t",A[i]);
putchar(10);
}
int main()
{
int A[]={0,10,9,8,7,6,5,4,3,2,1};
InsertSort(A, 10);
Disply(A, 10);
BinInsertSort(A, 10);
Disply(A, 10);
}