当前位置:首页 > 科技  > 软件

【排序算法】-折半插入排序

来源: 责编: 时间:2023-10-06 19:19:23 378观看
导读基本思想先来回顾一下直接插入排序的算法思想,就是在前面已经排好序的子序列中寻找一个待插入的位置,然后将待插入元素插入到该位置上。其中寻找插入位置的过程我们是与每一个元素进行比较,相当于顺序查找,我们知道顺序查

基本思想

先来回顾一下直接插入排序的算法思想,就是在前面已经排好序的子序列中寻找一个待插入的位置,然后将待插入元素插入到该位置上。BXL28资讯网——每日最新资讯28at.com

其中寻找插入位置的过程我们是与每一个元素进行比较,相当于顺序查找,我们知道顺序查找的效率是比较低的,那么有没有办法能够提高查找插入位置的效率呢?BXL28资讯网——每日最新资讯28at.com

很巧的是,前面的序列既然已经是有序的了,我们何不采用折半查找来找出插入位置呢?折半查找的前提就是序列有序,采用折半查找法查找插入位置的插入排序算法,我们称其为折半插入排序。BXL28资讯网——每日最新资讯28at.com

图解排序过程

折半插入算法非常简单,前提你得掌握直接插入排序和折半查找的算法,来看一个例子:BXL28资讯网——每日最新资讯28at.com

BXL28资讯网——每日最新资讯28at.com

原序列的前四个元素已经有序,则从i位置元素开始进行插入排序,先将i位置元素存入下标0作为哨兵,然后在子序列中寻找待插入位置。BXL28资讯网——每日最新资讯28at.com

这时我们可以采用折半查找法进行查找,定义三个变量lowhighmid,初始low = 1high = i -1,则mid为2BXL28资讯网——每日最新资讯28at.com

让哨兵位置元素值与mid位置元素值比较,7大于5,所以插入位置应该在右半区,让low = mid + 1high不变,继续折半查找:BXL28资讯网——每日最新资讯28at.com

BXL28资讯网——每日最新资讯28at.com

此时high大于low,查找结束,则插入位置即为high + 1,这些都是折半查找的内容,这里不赘述。BXL28资讯网——每日最新资讯28at.com

找到了插入位置为high + 1,可不能直接将待插入元素值存入high + 1位置,这样会覆盖原先的元素值,而应该从high + 1位置开始,到i - 1位置为止,将该范围内的所有元素后移,空开high + 1位置,最后将哨兵位置元素插入到high + 1位置即可。BXL28资讯网——每日最新资讯28at.com

代码实现

先构建待排序序列:BXL28资讯网——每日最新资讯28at.com

public class ElemType {    int key;}public class SSTable {    ElemType[] n;    int length;    public SSTable() {        this.length = 11;        this.n = new ElemType[this.length + 1];        for (int i = 1; i <= this.length; i++) {            this.n[i] = new ElemType();        }        this.n[1].key = 3;        this.n[2].key = 5;        this.n[3].key = 10;        this.n[4].key = 16;        this.n[5].key = 7;        this.n[6].key = 32;        this.n[7].key = 83;        this.n[8].key = 23;        this.n[9].key = 54;        this.n[10].key = 29;        this.n[11].key = 96;    }}

折半插入排序算法如下:BXL28资讯网——每日最新资讯28at.com

public class Main {    public static void BInsertSort(SSTable t) {        int i, j, low, high, mid;        //从第二个元素开始插入排序        for (i = 2; i <= t.length; ++i) {            //将待插入元素存入哨兵位置            ElemType temp = t.n[i];            //为low和high赋初值            low = 1;            high = i - 1;            while (low <= high) {                mid = (low + high) / 2;                if (temp.key < t.n[mid].key) {                    high = mid - 1;                } else {                    low = mid + 1;                }            }            //将high + 1到i - 1的元素后移            for (j = i - 1; j >= high + 1; --j) {                t.n[j + 1] = t.n[j];            }            //将哨兵位置元素插入j + 1位置            t.n[j + 1] = temp;        }    }    public static void main(String[] args) {        SSTable st = new SSTable();        BInsertSort(st);    }}

性能分析

可以肯定的是,折半插入排序的效率是要高于直接插入排序的,它所需要的关键码比较次数与待排序对象序列的初始排列无关,仅依赖于对象个数。在插入第i个对象时,需要经过「log2i」 + 1次关键码比较才能确定插入位置。BXL28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12133-0.html【排序算法】-折半插入排序

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 突破性能边界,OpenSwoole 引领 PHP 网络编程新时代!

下一篇: 推荐八个上热搜的GitHub开源项目

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • 分布式系统中的CAP理论,面试必问,你理解了嘛?

    对于刚刚接触分布式系统的小伙伴们来说,一提起分布式系统,就感觉高大上,深不可测。而且看了很多书和视频还是一脸懵逼。这篇文章主要使用大白话的方式,带你理解一下分布式系统
  • 学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人&ldquo;珍藏&rdquo;是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • 当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 半导体需求下滑 三星电子DS业务部门今年营业亏损预计超10万亿韩元

    7月17日消息,据外媒报道,去年下半年开始的半导体需求下滑,影响到了三星电子、SK海力士、英特尔等诸多厂商,营收明显下滑,部分厂商甚至出现了亏损。作为
  • iQOO Neo8 Pro评测:旗舰双芯加持 最强性能游戏旗舰

    【Techweb评测】去年10月,iQOO推出了一款Neo7手机,该机搭载了联发科天玑9000+,配备独显芯片Pro+,带来了同价位段最佳的游戏体验,一经上市便受到了诸多用
Top