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日

相关文章

  • Mybatis拦截器的实现介绍

    Mybatis拦截器的实现介绍 什么是Mybatis拦截器? Mybatis拦截器是一个在执行SQL语句的过程中,能够拦截到SQL执行的各个环节的组件。它可以在SQL执行过程中进行自定义的操作,比如修改SQL、动态生成SQL等。Mybatis内置了一些拦截器,如分页插件、SQL打印插件等。 实现一个自定义的Mybatis拦截器 要实现一个自定义的Mybati…

    Java 2023年5月20日
    00
  • mpvue微信小程序开发之实现一个弹幕评论

    mpvue微信小程序开发之实现一个弹幕评论 前言 在 mpvue 中使用一个基于 WebSocket 技术的弹幕评论系统可以增加小程序的用户参与度和互动效果。本文将带领读者一步步实现一个简单的弹幕评论系统。 准备 在开始开发之前,你需要在微信公众平台上注册一个小程序,并在本地搭建 mpvue 开发环境。另外,为了实现弹幕效果,你需要一个服务器来作为 WebS…

    Java 2023年5月23日
    00
  • Java web数据可视化实现原理解析

    下面我会详细讲解“Java web数据可视化实现原理解析”的完整攻略。 Java web数据可视化实现原理解析 什么是数据可视化 数据可视化顾名思义就是将数据以可视化的方式展示出来,如图表、图像、地图等形式,以便更加直观地理解数据。在企业、政府等管理领域,数据可视化已经成为了非常重要的工具。 Java web实现数据可视化的原理 Java web实现数据可视…

    Java 2023年5月19日
    00
  • Jar打包用法详解

    Jar打包用法详解 Jar是Java Archive的缩写,是一种用于打包Java类的标准格式。在Java开发中,经常需要将多个Java类打包成一个Jar文件,方便程序部署和传输。本文将详细介绍Jar打包的用法及示例。 基本用法 使用Jar命令行工具可以轻松地将多个Java类文件打包成一个Jar文件。下面是基本的用法: jar cf jarfile [-C …

    Java 2023年5月19日
    00
  • 微信小程序js文件改变参数并在视图上及时更新【推荐】

    针对这个问题,我为您提供以下完整攻略: 问题背景 在微信小程序开发中,我们通常需要在视图中传递参数,并且这些参数可能会随着操作或者其他因素发生变化。如果我们希望在参数发生变化的时候,及时更新视图,该怎么做呢? 解决方案 一种通用的解决方案是使用小程序提供的相应生命周期函数,根据参数的变化更新视图。具体实现方式如下: 1. 在wxml文件中绑定数据 首先需要在…

    Java 2023年5月23日
    00
  • 详解数据库连接的URL的写法及总结

    详解数据库连接的URL的写法及总结攻略分为以下几个部分: URL格式介绍 URL参数介绍 常用数据库URL示例 URL格式介绍 数据库连接URL的格式通常如下所示: protocol://username:password@hostname:port/databasename?option1=value1&option2=value2 其中,各部分的…

    Java 2023年6月16日
    00
  • IDEA配置Maven并版本统一管理的实现

    下面就为大家详细讲解 “IDEA配置Maven并版本统一管理的实现” 的攻略。 1. 配置Maven 1.1 下载安装Maven 首先,在官网下载最新的Maven,并且按照安装提示进行安装。 1.2 配置IDEA 打开IDEA,进行如下的配置: 点击菜单栏的 File -> Settings(或直接使用快捷键 Ctrl + Alt + S )打开设置界…

    Java 2023年5月19日
    00
  • 关于MVC与SpringMVC的介绍、区别、执行流程

    MVC与SpringMVC的介绍 MVC是一种软件设计模式,它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。模型表示应用程序的数据和业务逻辑,视图表示用户界面,控制器负责处理用户输入并更新模型和视图。 SpringMVC是Spring框架的一个模块,它是一个基于MVC架构的Web框架,用于构建Web应用程序。S…

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