直接插入排序算法的原理与实现

本文深入探讨了折半插入排序算法的原理、步骤及代码实现,并与常规插入排序进行了对比,强调了折半查找在优化排序过程中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BS(Begin Status)

OP:{}
UP:{a 01  ,a 02  , … ,a 0i  ,a 0i+1  , … ,a 0n1  }

STEP1. 将数列分为OP(已有序)和UP(无序)两部分

OP:{a 11  }
UP:{a 12  , … ,a 1i  ,a 1i+1  , … ,a 1n1  }

STEP2. 从UP中取第一个元素放到OP中适当位置

具体方法是: 从 OP 的最后一个位置起向前进行循环比较
OP:{a  21  ,a  22  }
UP:{a  23  , … ,a  2i  ,a 2i+1    , … ,a  2n1  }

STEP3. 重复 STEP2, 直至 UP 变成为空序列(即数列元素个数为0)

OP:{a  x1  ,…,a  xi1  }
UP:{a  xi  ,a xi+1    , … ,a  xn1  }

ES(End Status)

OP:{a  n1  ,a  n2  ,a  n3  , … ,a  ni  ,a ni+1    , … ,a  nn1  }
UP:{}


代码实现

//C++代码实现
void InsertSort(int arr,int arrSize)
{
    for(int i = 1;i < arrSize; i++)
    {
        int target=arr[i],j=i;
        while(j > 0 && target < arr[j-1])
        {
            arr[--j+1]=a[j];
        }
        arr[j]=target;
    }
}

拓展–折半插入排序(针对于数列个数比较大)

改进的关键措施是 在OP上 从 一般的循环比较 改成 二分法折半查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值