Java直接插入排序算法实现

下面是“Java直接插入排序算法实现”的完整攻略。

算法简介

直接插入排序,也叫插值排序,是对于插入排序算法的一种变形。与通常的插入排序不同之处在于,它可以在O(n)的时间内完成前n个元素的排序。类似于整理扑克牌,抓出一张新牌插入手中的牌序中。遍历未排序的元素,将其插入到已排序的序列中的正确位置。

算法步骤

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,插入到已经排序的元素序列中
  3. 对于新插入的元素,从后往前遍历已排序的序列
  4. 如果当前遍历到的元素大于新元素,则将大于新元素的元素往后移动一位
  5. 重复步骤3,4 直到找到正确的位置并插入元素
  6. 重复步骤2~5

Java代码实现

public class InsertionSort {
    public static void main(String[] args) {
        int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
        insertionSort(arr);
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }

    public static void insertionSort(int[] arr) {
        if (arr == null || arr.length <= 1) {
            return;
        }
        for (int i = 1; i < arr.length; i++) {
            int temp = arr[i];
            int j;
            for (j = i; j > 0 && temp < arr[j - 1]; j--) {
                arr[j] = arr[j - 1];
            }
            arr[j] = temp;
        }
    }
}

算法分析

  • 平均时间复杂度为O(n²)
  • 空间复杂度为O(1)
  • 稳定排序

示例说明

示例一

输入:[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]

输出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

示例二

输入:[6, 5, 4, 3, 2, 1]

输出:[1, 2, 3, 4, 5, 6]

在以上示例中,我们可以看到插入排序成功将无序的数组进行排序,而且在示例一中,排序后结果依然保持了元素原本的相对位置不变,因此这种排序方法被称为稳定排序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java直接插入排序算法实现 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 浅谈一个基础的SpringBoot项目该包含哪些

    一个基础的SpringBoot项目应该包含以下几个部分: 1. 项目结构 一般来说,一个Spring Boot 项目的包结构应该包含三个主要部分:application、config 和 controller。 application: 启动类的所在包,在 Spring Boot 项目中只能有一个,一般放在项目的根目录下。 config: 配置类所在的包,这…

    Java 2023年5月19日
    00
  • springboot清除字符串前后空格与防xss攻击方法

    Spring Boot 提供了多种方法,可以清除字符串前后的空格和防止 XSS 攻击。本文将详细讲解这些方法的使用。 清除字符串前后空格 使用 String 类的 trim() 方法 String 类的 trim() 方法可以去除字符串前后的空格。示例如下: public class StringUtil { public static String tri…

    Java 2023年5月27日
    00
  • 浅析java实现数据加密问题

    讲解”浅析java实现数据加密问题”的完整攻略,将分为以下几个部分: 加密和解密的基础概念和算法 java如何实现对数据进行加密 示例1:对字符串进行加密并解密 示例2:对文件进行加密并解密 加密和解密的基础概念和算法 数据加密是指将原来明文的内容通过某种算法(密钥)处理以后形成一定的密文,使得未经授权的人士无法获得原数据的信息内容。解密是指按照预定的算法,…

    Java 2023年5月23日
    00
  • 使用Spring自身提供的地址匹配工具匹配URL操作

    使用Spring自身提供的地址匹配工具主要用于匹配URL,实现对请求的访问控制。下面是使用Spring提供的地址匹配工具匹配URL的完整攻略: 1. 导入相关的依赖 Spring框架提供了对地址匹配的支持,需要在项目中导入相应的依赖,包括 Spring Web、Spring Security 等。 <dependencies> <depen…

    Java 2023年6月15日
    00
  • 以Java代码的方式总结几个典型的内存溢出案例

    以Java代码的方式总结典型的内存溢出案例 1. 堆溢出 1.1 原因 在Java中,所有的对象都存放在堆内存,如果创建了过多的对象而没有及时释放,那么就会导致堆内存溢出。 1.2 代码示例 public class HeapOverflowExample { public static void main(String[] args) { List lis…

    Java 2023年5月25日
    00
  • 用JavaScript实现 铁甲无敌奖门人 “开口中”猜数游戏

    下面是用JavaScript实现「铁甲无敌奖门人“开口中”猜数游戏」的完整攻略。 游戏规则 该游戏分为两个角色:猜数者和奖门人。在游戏开始时,奖门人会先随机设定一个数(一般为 1 到 100 之间的整数),并说出自己设定的数是在 1 到 100 之间。然后,猜数者可以轮流猜测这个数字,而奖门人将回答「大了」、「小了」或者「猜对了」。如果猜数者猜对了,游戏结束…

    Java 2023年6月15日
    00
  • Java反射机制介绍

    Java反射机制介绍 什么是反射机制 Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;并能够调用任意一个方法和访问任意一个属性,这种动态获取信息以及动态调用对象的方法的功能称为Java反射机制。 反射机制的优缺点 反射机制非常强大且灵活,但也有一些缺点: 性能问题:反射调用方法的效率要比直接调用方法的效率低很多,所以在需要…

    Java 2023年5月26日
    00
  • 如何解决hibernate一对多注解懒加载失效问题

    下面就来详细讲解如何解决 Hibernate 一对多注解懒加载失效问题。 问题描述 在 Hibernate 中,我们通过一对多的注解来建立两个表的关联关系。如果这个关联关系是懒加载的,那么在查询父表时,子表的数据不会立即被加载,而会在需要使用时再去查询。但是有时候会遇到懒加载失效的问题,这时候就需要解决。下面就是一些常见的解决方法。 解决方法一:使用 Hib…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部