备案 控制台
开发者社区 人工智能 文章 正文

数据结构 | 排序算法总结——(二)折半插入排序(附Java实现代码)

简介: 数据结构 | 排序算法总结——(二)折半插入排序(附Java实现代码)

1.2.2折半插入排序

原理:有一组数据待排序,排序区间为Array[0]~Array[n-1]。将数据分为有序数据和无序数据,第一次排序时默认Array[0]为有序数据,Array[1]~Array[n-1]为无序数据。有序数据分区的第一个元素位置为low,最后一个元素的位置为high。遍历无序区间的所有元素,每次取无序区间的第一个元素Array[i],因为0~i-1是有序排列的,所以用中点m将其平分为两部分,然后将待排序数据同中间位置为m的数据进行比较,若待排序数据较大,则low~m-1分区的数据都比待排序数据小,反之,若待排序数据较小,则m+1~high分区的数据都比 待排序数据大,此时将low或high重新定义为新的合适分区的边界,对新的小分区重复上面操作。直到low和high 的前后顺序改变,此时high+1所处位置为待排序数据的合适位置。

实例:

以i=4时为例:

第一步

image.png

第二步

image.png

第三步:

image.png

第四步:

image.png

第五步:

image.png

第六步:

image.png

第七步:

image.png

性能分析:

             空间效率:O(1)

             时间效率:O(n^2)

稳定性:稳定

折半插入排序仅仅减少了比较元素的次数,约为(nlog2n),该比较次数与待排序表的初始状态无关,仅仅取决于表中的元素个数n,而元素的移动次数没有改变,它依赖于待排序表的初始状态。

import java.util.Scanner;
import java.util.Arrays;
public class ZheBanInsertSort {
    private static void zheBanInsert(int[] arr) {
        for (int i=1;i<arr.length;i++){
            int temp = arr[i];
            // 用折半查找法去查找
            int low = 0;
            int high = i-1;
            while (low<=high){
                int mid = (low+high)/2;
                if (arr[mid]>temp){
                    high = mid - 1;
                }else {
                    low = mid + 1;
                }
            }
            // 确定最后的位置为low或者high+1
            for (int j=i-1;j>=low;j--){
                arr[j+1] = arr[j];
            }
            // 赋值
            arr[low] = temp;
        }
        System.out.println("折半插入排序:"+Arrays.toString(arr));
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);//Scanner工具类键盘输入数据
        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            if (n > 0) {
                int arr[] = new int[n];
                for (int i = 0; i < n; i++) {
                    arr[i] = scanner.nextInt();
                }
                zheBanInsert(arr);//调用折半插入排序zheBanInsert方法
            }
        }
    }
}
游客bmjnbwc6z3aum
目录
相关文章
小森ai小小贾
|
1天前
|
算法 Python
数据结构算法--4堆排序
堆排序过程概述:建立大根堆,将堆顶最大元素移出并替换为末尾元素,调整保持堆性质,重复此过程直至堆为空,实现排序。时间复杂度为O(nlogn)。Python中可用heapq模块进行堆操作。
小森ai小小贾
15 3
游客pnral34kl5xba
|
1天前
|
算法 Java 机器人
Java数据结构与算法:并发数据结构ConcurrentHashMap
Java数据结构与算法:并发数据结构ConcurrentHashMap
游客pnral34kl5xba
13 3
东方睿赢
|
1天前
|
搜索推荐 算法 Java
Java中的快速排序、归并排序和堆排序是常见的排序算法。
【6月更文挑战第21天】Java中的快速排序、归并排序和堆排序是常见的排序算法。快速排序采用分治,以基准元素划分数组并递归排序;归并排序同样分治,先分割再合并有序子数组;堆排序通过构建堆来排序,保持堆性质并交换堆顶元素。每种算法各有优劣:快排平均高效,最坏O(n²);归并稳定O(n log n)但需额外空间;堆排序O(n log n)且原地排序,但不稳定。
东方睿赢
14 3
小森ai小小贾
|
1天前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
小森ai小小贾
13 2
小森ai小小贾
|
1天前
|
机器学习/深度学习 算法 索引
数据结构算法--1 顺序查找二分查找
**顺序查找时间复杂度为O(n)**,适合无序列表,可以通过`enumerate`或直接遍历索引来实现。**二分查找时间复杂度为O(logn)**,适用于有序列表,利用Python中`left`、`right`指针和`mid`点不断缩小搜索范围。效率上二分查找更优。
小森ai小小贾
8 2
小竹笋
|
1天前
|
算法 网络协议 Java
我的Java数据结构和算法
我的Java数据结构和算法
小竹笋
6 0
小森ai小小贾
|
1天前
|
算法 搜索推荐
数据结构算法--6 希尔排序和计数排序
**希尔排序**是插入排序的改进版,通过分组插入来提高效率。它逐步减少元素间的间隔(增量序列),每次对每个间隔内的元素进行插入排序,最终增量为1时进行最后一次直接插入排序,实现整体接近有序到完全有序的过程。例如,对数组`5, 7, 4, 6, 3, 1, 2, 9, 8`,先以间隔`d=4`排序,然后`d=2`,最后`d=1`,完成排序。计数排序则适用于0到100的数值,通过统计每个数出现次数,创建对应计数数组,再根据计数重建有序数组,时间复杂度为`O(n)`。
小森ai小小贾
16 0
杨校
|
2天前
|
搜索推荐 算法
排序算法之插入排序
排序算法之插入排序
杨校
11 0
游客pnral34kl5xba
|
2天前
|
存储 算法 Java
Java数据结构与算法:线性数据结构之链表
Java数据结构与算法:线性数据结构之链表
游客pnral34kl5xba
8 0
游客pnral34kl5xba
|
2天前
|
算法 Java 编译器
Java数据结构与算法:线性数据结构之栈
Java数据结构与算法:线性数据结构之栈
游客pnral34kl5xba
9 0

热门文章

最新文章

  • 1
    云原生数据仓库产品使用合集之在ADB中,如何将源数据的多表(数据结构一致)汇总到一张表
  • 2
    InfluxDB数据模型与数据结构设计详解
  • 3
    Redis入门到通关之Redis数据结构-ZSet篇
  • 4
    什么是堆?什么是栈?他们之间从区别和联系
  • 5
    短程无线自组网协议栈之:意义和价值是什么?
  • 6
    Redis入门到通关之数据结构解析-SkipList
  • 7
    Redis入门到通关之Redis数据结构-String篇
  • 8
    可视化数据结构——让你的树跃然纸上
  • 9
    Redis入门到通关之Redis数据结构-List篇
  • 10
    Redis入门到通关之Redis数据结构-Set篇
  • 1
    【数据结构】八大排序之计数排序算法
    16
  • 2
    【数据结构】八大排序之归并排序算法
    24
  • 3
    【数据结构】八大排序之快速排序算法
    44
  • 4
    深入理解InnoDB索引数据结构和算法
    68
  • 5
    Java入门高频考查算法逻辑基础知识3-编程篇(超详细18题1.8万字参考编程实现)
    43
  • 6
    sklearn应用线性回归算法
    32
  • 7
    深度思考:雪花算法snowflake分布式id生成原理详解
    233
  • 8
    金石推荐 | 【算法数据结构专题】「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现延时队列的开发实战落地(下)(一)
    69
  • 9
    大厂算法指南:优选算法 ——双指针篇(下)
    31
  • 10
    如何评判算法好坏?复杂度深度解析
    43
  • 相关课程

    更多
  • 智能运维赛(复赛):利用数据和算法,快速定位系统异常并进行根因分析
  • 智能创作赛(复赛):相册应用中的视频故事生成算法介绍
  • 智能创作赛(初赛):相册应用中的故事生成算法介绍
  • 相册服务中的故事生成算法介绍
  • Go语言核心编程 - 数据结构和算法
  • 神经网络概览及算法详解
  • 相关电子书

    更多
  • 数据+算法定义新世界
  • 袋鼠云基于实时计算的反黄牛算法
  • Alink:基于Apache Flink的算法平台
  • 相关实验场景

    更多
  • 使用Swing算法实现商品推荐
  • 阿里云平台上进行Java程序的编译与运行
  • RSA密码算法设计与实现
  • RSA非对称加密算法
  • 欧拉图的构造性证明与算法实现
  • 下一篇
    2024年阿里云免费云服务器及学生云服务器申请教程参考

    深圳SEO优化公司木棉湾网络营销福永网站设计木棉湾百搜标王大浪百姓网标王推广横岗百搜词包东莞百度竞价坪山网站seo优化坂田网站建设坪地建网站同乐关键词排名塘坑英文网站建设坪山模板推广爱联网站seo优化东莞网站推广大鹏网站推广系统石岩网站优化惠州网页设计大芬模板制作木棉湾百度seo南澳百度关键词包年推广布吉设计公司网站双龙网站优化按天收费福田百搜标王吉祥网站搜索优化龙华SEO按天收费木棉湾百度竞价包年推广同乐建设网站南山关键词按天扣费坪山模板推广光明百度seo歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化