//*************************************
// 直接插入排序法
// 思路: 从后往前搜索。不断将数据移后,找到位置则插入。
// A[0] 哨兵作用: 保存待插入的尾部数据,这样不怕原来数据后移时候将其覆盖;查找边界监视(因为是从后往前搜索)
// 只能用A[0]做小兵,不能使用单独一个变量soldier做小兵。
// 调用:
Status InsertSort(ElemType A[], NumType n)
{
int i,j;
ElemType A0_REG=A[0];// 保存A[0]的数值,最后A[0]也要加入排序
for(i=2;i<n;i++) // 执行n-2次插入操作。
{
A[0]=A[i];
j=i-1;
while(A[0]<A[j])
{
A[j+1]=A[j];// 数据后移
j--;// 游标向前,为下一次比较准备
}///while
A[j+1]=A[0];// 找到位置,插入。
}///for
// 收尾: 原A[0]参与排序
// 找到 A[0] 要插入的位置
j=n-1;
A[0]=A0_REG;
while(A[0]<A[j])
{
j--; // 找到插入位置
}
if(j!=0) // A[j]之前的数据全部前移动
{
for(i=0;i<j;i++)
{
A[i]=A[i+1]; // A[j]之前的数据全部前移动
}
}
A[j]=A0_REG;//插入数据A[0]
return OK;
}///end Status InsertSort(ElemType A[], NumType n)
// 直接插入排序法
// 思路: 从后往前搜索。不断将数据移后,找到位置则插入。
// A[0] 哨兵作用: 保存待插入的尾部数据,这样不怕原来数据后移时候将其覆盖;查找边界监视(因为是从后往前搜索)
// 只能用A[0]做小兵,不能使用单独一个变量soldier做小兵。
// 调用:
Status InsertSort(ElemType A[], NumType n)
{
int i,j;
ElemType A0_REG=A[0];// 保存A[0]的数值,最后A[0]也要加入排序
for(i=2;i<n;i++) // 执行n-2次插入操作。
{
A[0]=A[i];
j=i-1;
while(A[0]<A[j])
{
A[j+1]=A[j];// 数据后移
j--;// 游标向前,为下一次比较准备
}///while
A[j+1]=A[0];// 找到位置,插入。
}///for
// 收尾: 原A[0]参与排序
// 找到 A[0] 要插入的位置
j=n-1;
A[0]=A0_REG;
while(A[0]<A[j])
{
j--; // 找到插入位置
}
if(j!=0) // A[j]之前的数据全部前移动
{
for(i=0;i<j;i++)
{
A[i]=A[i+1]; // A[j]之前的数据全部前移动
}
}
A[j]=A0_REG;//插入数据A[0]
return OK;
}///end Status InsertSort(ElemType A[], NumType n)