首页 > 编程语言 >Java常见排序算法-插入排序

Java常见排序算法-插入排序

时间:2024-10-15 08:49:10浏览次数:3  
标签:arr Java 插入排序 算法 排序 数据 复杂度

一、算法介绍 

插入排序是一种简单且常用的排序算法,它的实现思路是将列表分为已排序和未排序两部分,每次从未排序部分取出一个元素,将它插入到已排序部分的适当位置,最终将列表排序完成。即将未排序的数值直接插入有序的一组数中,使得插入后的这组数还是有序的。

二、算法示意图

三、算法实现

    public static void main(String[] args) {
        int[] arr = {2, 5, 9, 4, 1, 6};
        System.out.println(Arrays.toString(arr));

        //算法核心
        for (int i = 1; i < arr.length; i++) {
            int temp = arr[i];
            int j = i - 1;
            while (j >= 0 && arr[j] > temp) {
                arr[j + 1] = arr[j];
                j--;
            }
            arr[j + 1] = temp;
        }
        //排序后结果输出
        System.out.println(Arrays.toString(arr));
    }

运行结果

[2, 5, 9, 4, 1, 6]
[1, 2, 4, 5, 6, 9] 

四、算法性能

排序算法时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度稳定性
插入排序O(n^2)O(n^2)O(n)O(1)稳定

插入排序的时间复杂度为O(n^2),其中n是数组的长度。它是一种稳定的排序算法,并且在小规模数据或部分有序的数据上表现良好。然而,在处理大规模数据时,插入排序的性能可能不如其他更高效的排序算法。
优点:

  1. 简单易实现: 插入排序算法的实现相对简单,易于理解和编写。

  2. 原地排序: 插入排序只需要使用常数级别的额外空间,可以在原地进行排序,不需要额外的辅助空间。

  3. 稳定性: 插入排序是一种稳定的排序算法,相等元素的相对顺序在排序后不会改变。

缺点:

  1. 较慢的平均和最坏时间复杂度:插入排序的平均时间复杂度为O ( n 2 ) O(n^2)O(n 2 ),最坏情况下的时间复杂度也是O ( n 2 ) O(n^2)O(n 2),其中n是待排序元素的数量。这使得插入排序在处理大规模数据时效率较低。

  2. 对逆序数据的排序效率低:如果待排序的数据已经部分有序或者是逆序的,插入排序的效率会明显降低。当逆序度较高时,需要进行大量的元素移动操作,导致性能下降。

  3. 不适用于大规模数据: 由于插入排序的时间复杂度较高,它在处理大规模数据时的性能表现不如其他更高级的排序算法(如快速排序、归并排序等)。

  4. 不适用于链式结构: 插入排序需要频繁地访问和移动元素,对于链式结构来说,访问和移动的成本较高,因此不适用于链表等非随机访问结构的排序。

五、算法应用

插入排序算法在处理小规模数据集或部分排序的数据集时有着明显的优势,如低时间复杂度和简单的实现逻辑。然而,由于其较高的时间复杂度,对于大规模数据集,插入排序通常不是一个理想的选择。在实际应用中,应根据数据的规模和特性来选择合适的排序算法,以确保程序的效率和性能。

标签:arr,Java,插入排序,算法,排序,数据,复杂度
From: https://blog.csdn.net/taogumo/article/details/142874227

相关文章

  • 深入理解Java并发读写锁——ReentrantReadWriteLock
    ReentrantReadWriteLock使用场景ReentrantReadWriteLock是Java的一种读写锁,它允许多个读线程同时访问,但只允许一个写线程访问(会阻塞所有的读写线程)。这种锁的设计可以提高性能,特别是在读操作的数量远远超过写操作的情况下。在并发场景中,为了解决线程安全问题,我们通常会使用关......
  • java计算机毕业设计大学生竞赛项目自由组队平台(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今高等教育体系中,大学生竞赛已成为培养学生创新思维、团队协作和实践能力的重要途径。然而,传统的竞赛组队方式往往受限于学生的人际交往圈,导致优......
  • Java中的String对象
    文章目录前言1.String类的介绍2.创建String对象2.1引用String常量2.2使用构造方法3.String对象的并置4.String对象与基本数据类型的转换4.1String-->基本数据类型4.2基本数据类型-->String5.String的常用方法5.1length()5.2charAt(intindex)5.3substring(......
  • 有缺陷的 Java 代码:Java 开发人员最常犯的 10 大错误
    Java是一种复杂的编程语言,很长一段时间以来一直主导着许多生态系统。可移植性、自动垃圾回收及其温和的学习曲线是使其成为软件开发的绝佳选择的一些因素。但是,与任何其他编程语言一样,它仍然容易受到开发人员错误的影响。本文探讨了Java开发人员最常犯的10大错误以......
  • java实现 已知一颗树的层序遍历和中序遍历 输出树的先序遍历和后序遍历
    给定树的节点数,在给出这棵树的层序遍历和中序遍历输出这棵树的先序遍历和后序遍历输入735426712536471输出35246712561743importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Scanner;classN......
  • java数组讲解
    前言:由上两章,我们已经了解关于java的基础语法,这章我们将讲解数组的相关语法,坐好了没,我们准备要发车啦!!!我们将从五部分给大家讲解:1数组的基本概念2.数组是引用类型3.数组的应用场景4.数组的练习5.二维数组1数组的基本概念:1.1 为什么要使用数组1.存储多个相同类型的......
  • 【油猴脚本】00027 案例 Tampermonkey油猴脚本, 仅用于学习,不要乱搞。添加标题为网页数
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • java计算机毕业设计OA办公自动化系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展,企业办公模式正经历着深刻的变革。传统的纸质化、人工化的办公方式已难以满足现代企业高效、协同、信息化的管理需求。OA(Offi......
  • java计算机毕业设计城市天然气管理系统(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速,天然气作为一种清洁、高效的能源,在城市能源供应中占据了越来越重要的地位。然而,传统的天然气管理方式存在诸多不足,如信息孤岛、......
  • 今日一学,5道Java基础面试题(附Java面试题及答案整理)
    前言马上国庆了,本来想着给自己放松一下,刷刷博客,慕然回首,自动拆装箱?equals?==?HashCode?instanceof?似乎有点模糊了,那就大概看一下5道Java基础面试题吧。好记性不如烂键盘~***12万字的java面试题整理***instanceof关键字的作用instanceof严格来说是Java中的一个双目运算符,用......