排序——插入排序(C++)

本文详细介绍了两种插入排序方法:直接插入排序和折半插入排序。直接插入排序在while循环中保证了稳定性,其时间复杂度为O(n^2)。折半插入排序利用折半查找来确定插入位置,提高了效率。文章提供了相应的C++代码示例。

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

插入排序分为直接插入排序和折半插入排序两种

1、直接插入排序

算法描述:
        设存在一个一维数组 array[0......n-1], 第 i 趟排序是将数组中下标为 i 的第 i + 1 个元素插入到一个已经按值有序排列的i个子序列的合适位置。
       (1)第一个元素看成有序序列,从下标为 i = 1 的第二个元素开始,每一趟排序都将下标为 i 的元素插入到之前的有序序列中,然后 i = i + 1 进行下一个元素的插入排序,由此可见插入排序需要 n - 1 趟排序
      (2)每次寻找插入元素 array[i] 的位置,是从有序序列的最后一个元素 array[i-1] 开始查找,直到找到某一位置的元素 array[j] (j >= 0 && j <= i-1)满足 array[j] <= array[i], 那么下标为j + 1 的位置就应该是插入元素 array[i]的合适位置。从有序序列的最后一个元素开始查找,边查找边移动元素,而不是先找到插入位置再移动元素,这样提高了效率。
      (3)将array数组中下标 [j + 1,i - 1]的所有元素依次后移一位,空出 array[j+1]的位置。

      (4)将array[i] 元素赋值给 array[j+1],至此完成插入排序的一趟排序。

例程:

#include <iostream>  
using namespace std;

int simple_insert_sort(int ar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值