// 直接插入排序法

//*************************************
// 直接插入排序法 
// 思路: 从后往前搜索。不断将数据移后,找到位置则插入。
//        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)
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值