博客
关于我
二分查找与插入排序的结合使用
阅读量:353 次
发布时间:2019-03-04

本文共 1226 字,大约阅读时间需要 4 分钟。

插入排序中的插入位置查找操作可以通过二分查找优化,提升性能。我们可以通过以下步骤实现这一点。

思路分析

插入排序的核心在于为新元素找到合适的位置。传统方法是从后向前扫描找到插入点,而二分查找则利用有序数组的特性,快速缩小范围。

  • 基本原理:由于每次插入的子数组都是有序的,二分查找能高效找到插入位置。我们从数组的前端开始,逐步处理每个元素。

  • 查找过程:设置low和high初始值,通过循环确定插入位置。若中间元素大于当前元素,调整high;反之调整low,直到找到正确位置。

  • 插入操作:找到位置后,从后向前移动元素,腾出位置,插入当前元素。

  • 优化灵活性:通过调换条件,可以实现插入排序的不同策略,如降序排序。

  • #include 
    using namespace std;void sort(int arr[], int n) { int low, high, place, temp; for (int i = 1; i < n; ++i) { low = 0, high = i - 1; temp = arr[i]; while (low <= high) { int mid = (low + high) / 2; if (temp <= arr[mid]) { high = mid - 1; } else { low = mid + 1; } } place = low; for (int j = i - 1; j >= place; --j) { arr[j + 1] = arr[j]; } arr[place] = temp; }}int main() { int arr[9] = {3, 5, 1, 2, 7, 9, 12, 14, 8}; sort(arr, 9); for (int i = 0; i < 9; ++i) { cout << arr[i] << " "; } cout << endl; return 0;}

    代码解释

    • 排序函数sort函数接受数组和其长度,实现插入排序。
    • 外层循环:从第二个元素开始处理,逐步构建有序数组。
    • 二分查找:通过low和high确定插入位置,利用中间元素进行范围缩小。
    • 插入操作:从当前位置开始,向后移动元素,插入新元素。
    • 主函数:初始化数组,调用排序函数,输出结果。

    这种方法保持了插入排序的时间复杂度O(n²),但通过二分查找显著提升查找效率,达到O(log n)。整体复杂度为O(n²),适合大部分实际应用。

    转载地址:http://dbgr.baihongyu.com/

    你可能感兴趣的文章
    剑指offer JZ21 栈的压入弹出序列
    查看>>
    Netty4服务端入门代码示例
    查看>>
    VL53L0x TOF激光测距的 stm32 HAL库驱动代码
    查看>>
    自定义标签(JSP2.0)简单标签
    查看>>
    MyBatis自定义类型转换器
    查看>>
    Python:函数 ----》装饰器函数
    查看>>
    Python:面向对象
    查看>>
    Spring源码:prepareBeanFactory(beanFactory);方法
    查看>>
    Spring源码:initApplicationEventMulticaster源码解析
    查看>>
    AcWing 786: 第k个数
    查看>>
    AcWing 828. 模拟栈
    查看>>
    添加Selinux权限
    查看>>
    (2019.9.10测试可用)如何在Windows的cmd中使用ls命令
    查看>>
    (20200328已解决)从docker容器内复制文件到宿主机
    查看>>
    理解Docker ulimit参数
    查看>>
    理解Library of Congress Cataloging-in-Publication Data
    查看>>
    理解Python系统下的时间格式
    查看>>
    Python语言'类'概念再理解
    查看>>
    OpenAI Gym简介及初级实例
    查看>>
    Ubuntu 18.04 zip压缩文件及其文件 夹中的所以 内容
    查看>>