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

插入排序:简单而有效的排序方法

来源: 责编: 时间:2023-10-06 19:20:07 385观看
导读在计算机科学中,排序算法是一个重要且常见的主题,它们用于对数据进行有序排列。插入排序(Insertion Sort)是其中一个简单但有效的排序算法。本文将详细解释插入排序的原理和步骤,并提供Java语言的实现示例。插入排序的原理

在计算机科学中,排序算法是一个重要且常见的主题,它们用于对数据进行有序排列。插入排序(Insertion Sort)是其中一个简单但有效的排序算法。本文将详细解释插入排序的原理和步骤,并提供Java语言的实现示例。Yji28资讯网——每日最新资讯28at.com

插入排序的原理及性能分析

插入排序的核心思想是逐个将未排序的元素插入到已排序的部分中,构建有序序列。这个过程类似于整理扑克牌,每次拿出一张牌并将其插入到已排序的牌堆中。Yji28资讯网——每日最新资讯28at.com

图片图片Yji28资讯网——每日最新资讯28at.com

插入排序的步骤

插入排序的步骤可以简单概括为以下几个阶段:Yji28资讯网——每日最新资讯28at.com

  1. 初始状态:将数组的第一个元素视为已排序部分,其余部分为未排序部分。
  2. 逐个插入:从未排序部分选择一个元素,将其插入到已排序部分的正确位置。为了插入,将已排序部分中大于待插入元素的元素向右移动一个位置。
  3. 重复:重复上述插入步骤,直到所有元素都被插入到已排序部分。
  4. 完成:当算法完成时,整个数组就被排序了。

图片图片Yji28资讯网——每日最新资讯28at.com

Java实现插入排序

以下是使用Java语言实现插入排序算法的示例代码:Yji28资讯网——每日最新资讯28at.com

public class Test {    public static void main(String[] args) {        int[] arr = new int[]{5,2,4,6,7,1,3};        insertionSort(arr);    }    public static void insertionSort(int[] arr){        System.out.println("原始数组:"+ Arrays.toString(arr));        //获取数组长度        int len = arr.length;        // 循环 len-1 次,进行数组排序。第一次将数组的第一个元素视为已排序的部分,        // 每次将未排序部分的第一个元素插入到已排序的部分。        for(int i = 1 ; i< len ; i++){            //目标元素,未排序部分的第一个元素,即当前循环中要插入排序的元素            int target  = arr[i];            //已排序元素中的最后一个元素的下标            int j = i-1;            // 循环已排序的部分的数组,找到目标元素应该存放的下标            while (j>= 0 && arr[j] > target ){                // 如果插入元素小于当前元素,则将当前元素后移一位                arr[j+1] = arr[j];                // 当前已排序的数据比较元素的下标前移一位                j--;            }            //将目标元素插入到正确的位置            arr[j+1] = target;            // 打印每趟排序完成后的数组状态,以便查看排序进度            System.out.println("第"+i+"趟排序完成的数组:"+ Arrays.toString(arr));        }        System.out.println("排序完成的数组:"+ Arrays.toString(arr));    }}

以上代码演示了如何使用插入排序对一个整数数组进行排序。插入排序算法的核心思想是逐个将未排序的元素插入到已排序的部分,直到整个数组排序完成。Yji28资讯网——每日最新资讯28at.com

性能及优缺点的分析

插入排序(Insertion Sort)是一种简单但性能较差的排序算法,其性能取决于输入数据的初始顺序。以下是对插入排序性能的分析:Yji28资讯网——每日最新资讯28at.com

  • 时间复杂度

在最坏情况下,插入排序的时间复杂度为,其中n是数组的长度。这是因为在最坏情况下,每个元素都需要与已排序部分中的所有元素进行比较和移动。在最好情况下,如果输入数据已经接近有序,插入排序的时间复杂度可以降至O(n),因为很少需要移动元素。Yji28资讯网——每日最新资讯28at.com

  • 空间复杂度

插入排序是一种稳定排序算法,其空间复杂度为O(1),因为它只需要常量级别的额外空间来存储临时变量。Yji28资讯网——每日最新资讯28at.com

  • 稳定性

插入排序是一种稳定的排序算法,即具有相等键值的元素在排序后仍然保持相对顺序。Yji28资讯网——每日最新资讯28at.com

  • 适用性

插入排序适用于小型数据集或已接近排序状态的数据集。对于大型数据集,插入排序的性能会变得相对较差,并且不如一些更高级的排序算法,如快速排序或归并排序Yji28资讯网——每日最新资讯28at.com

  • 优点

插入排序的优点是实现简单,易于理解和调试。在某些情况下,它可能比其他排序算法更快,尤其是对于小型数据集。Yji28资讯网——每日最新资讯28at.com

  • 缺点

插入排序的缺点是其时间复杂度较高,特别是在大型数据集上。对于大规模数据,更高效的排序算法通常更受欢迎。Yji28资讯网——每日最新资讯28at.com

总结

总的来说,插入排序是一种简单但性能较差的排序算法,主要用于教学和小型数据集。在实际应用中,通常会选择更高效的排序算法,以提高排序速度。Yji28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12141-0.html插入排序:简单而有效的排序方法

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

上一篇: WPF中静态资源和动态资源区别?

下一篇: 系统设计目标:如何让系统易于扩展?

标签:
  • 热门焦点
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 一年经验在二线城市面试后端的经验分享

    忠告这篇文章只适合2年内工作经验、甚至没有工作经验的朋友阅读。如果你是2年以上工作经验,请果断划走,对你没啥帮助~主人公这篇文章内容来自 「升职加薪」星球星友 的投稿,坐
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 拼多多APP上线本地生活入口,群雄逐鹿万亿市场

    Tech星球(微信ID:tech618)文 | 陈桥辉 Tech星球独家获悉,拼多多在其APP内上线了&ldquo;本地生活&rdquo;入口,位置较深,位于首页的&ldquo;充值中心&rdquo;内,目前主要售卖美食相关的
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 四年持续更迭坚持探索行业无人之境,HarmonyOS 4带来五大升级多项创新

    除了华为每年新发布的旗舰手机系列,上亿花粉更加期待鸿蒙系统每次的跨版本大更新。8月4日,HarmonyOS 4于HDC 2023正式发布,这也是该系统历经四年的再
  • 三星Galaxy Z Fold5官方渲染图曝光:13.4mm折叠厚度依旧感人

    据官方此前宣布,三星将于7月26日在韩国首尔举办Unpacked活动,届时将带来带来包括Galaxy Buds 3、Galaxy Watch 6、Galaxy Tab S9、Galaxy Z Flip 5、
Top