经典排序算法(4)——折半插入排序算法详解

经典排序算法(4)——折半插入排序算法详解折半插入排序 BinaryInsert 是一种插入排序算法 通过不断地将数据元素插入到合适的位置进行排序 在寻找插入点时采用了折半查找 一 算法基本思想 1 基本思想折半插入排序的基本思想是 顺序地把待排序的序列中的各个元素按其关键字的大小 通过折半查找插入到已排序的序列的适当位置 2 运行过程直接插入排序的运

折半插入排序(Binary Insertion Sort)是一种插入排序算法,通过不断地将数据元素插入到合适的位置进行排序,在寻找插入点时采用了折半查找。

一、算法基本思想

(1)基本思想

折半插入排序的基本思想是:顺序地把待排序的序列中的各个元素按其关键字的大小,通过折半查找插入到已排序的序列的适当位置。

(2)运行过程

直接插入排序的运作如下:

1、将待排序序列的第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

2、从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置,在查找元素的适当位置时,采用了折半查找方法。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

经典排序算法(4)——折半插入排序算法详解

二、算法实现(核心代码)

C++实现:

void binary_insertion_sort(int arr[], int len) { int i, j, temp, m, low, high; for (i = 1; i < len; i++) { temp = arr[i]; low = 0; high = i-1; while (low <= high) { m = (low +high) / 2; if(arr[m] > temp) high = m-1; else low = m+1; } } for (j = i-1; j>=high+1; j--) arr[j+1] = arr[j]; arr[j+1] = temp; }


Java实现:

public void binary_insertion_sort(int arr[]) { int i, j, temp, m, low, high, len = arr.length; for (i = 1; i < len; i++) { temp = arr[i]; low = 0; high = i-1; while (low <= high) { m = (low +high) / 2; if(arr[m] > temp) high = m-1; else low = m+1; } } for (j = i-1; j>=high+1; j--) arr[j+1] = arr[j]; arr[j+1] = temp; }



三、性能(算法时间、空间复杂度、稳定性)分析

折半查找只是减少了比较次数,但是元素的移动次数不变。折半插入排序平均时间复杂度为O(n^2);空间复杂度为O(1);是稳定的排序算法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230410.html原文链接:https://javaforall.net

(0)
上一篇 2026年2月24日 下午6:01
下一篇 2026年2月24日 下午6:22


相关推荐

  • python 颜色代码

    python 颜色代码aliceblue F0F8FF antiquewhite FAEBD7 aqua 00FFFF aquamarine 7FFFD4 azure F0FFFF beige F5F5DC bisque FFE4C4 black

    2026年3月26日
    2
  • OpenProcessToken令牌函数用法「建议收藏」

    OpenProcessToken令牌函数用法「建议收藏」>GetCurrentProcessID得到当前进程的IDOpenProcessToken得到进程的令牌句柄LookupPrivilegeValue查询进程的权限AdjustTokenPrivileges调整令牌权限要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了。要是一个用户是Admin

    2022年6月25日
    25
  • uniapp实现微信小程序支付功能

    uniapp实现微信小程序支付功能我这个项目是一个外卖小程序首先要做支付功能 需要两个条件 1 必须是企业 个人用户不行 2 去微信支付平台提交资料审核首先封装网络请求 api js 引进提示 import errdata from api errdata js GETletlistin function urling returnnewPro resolve reject gt uni request url urling method GET

    2026年3月18日
    2
  • 电信dns服务器哪个稳定,电信宽带dns设置哪个最快? dns设置哪个最好最快「建议收藏」

    电信dns服务器哪个稳定,电信宽带dns设置哪个最快? dns设置哪个最好最快「建议收藏」中国电信广州用户(包括番禺、增城、从化等区电信用户)“首选DNS服务器”为:61.144.56.101“备用DNS服务器”为:61.144.56.100这个经过测试确实是目前最快最有效的DNS服务器。2中国电信深圳用户“首选DNS服务器”为:202.96.128.86“备用DNS服务器”设置为:202.96.128.1663中国电信广东省其他地区用户(包括佛山、中山、江门、珠海、汕头等地区电信…

    2022年7月11日
    98
  • linux下定时执行脚本[通俗易懂]

    linux下定时执行脚本[通俗易懂]1.安装crontabyuminstall vixie-cronyuminstallcrontab2.启动crontab服务servicecrond start用以下的方法启动、关闭这个cron服务: servicecrondstart//启动服务 servicecrondstop//关闭服务 servicecrondrestart//…

    2022年7月17日
    17
  • aigc工具链是什么意思

    aigc工具链是什么意思

    2026年3月15日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号