Java经典排序算法之插入排序

Java经典排序算法之插入排序

插入排序算法简介

插入排序是一种简单直观的排序算法,它的基本思想是将待排序序列分为已排序和未排序两部分,初始时将第一个元素视为已排序序列,将其他元素视为未排序序列。然后依次将未排序序列中的元素插入到已排序序列中的正确位置。在插入元素时,需要从右到左比较已排序序列中的元素,找到插入元素的正确位置。

插入排序算法示例

假设我们要对以下数组进行排序:[3, 1, 4, 2, 5]。

  1. 初始时,我们将第一个元素3视为已排序序列,将其他元素1、4、2、5视为未排序序列。

3 | 1 4 2 5

  1. 取出未排序序列中的第一个元素1,将它插入到已排序序列中的正确位置。由于1比3小,因此1应该插入到3的左侧。

1 3 | 4 2 5

  1. 取出未排序序列中的下一个元素4,将它插入到已排序序列中的正确位置。由于4比3大,因此4应该插入到3的右侧。

1 3 4 | 2 5

  1. 接着取出未排序序列中的下一个元素2,将它插入到已排序序列中的正确位置。由于2比4小,因此2应该插入到4的左侧,而4又比3大,因此2应该插入到3的左侧。

1 2 3 4 | 5

  1. 最后取出未排序序列中的最后一个元素5,将它插入到已排序序列中的正确位置。由于5比4大,因此5应该插入到4的右侧。

1 2 3 4 5 |

经过以上步骤,我们成功地对数组进行了排序。

Java代码实现

下面是Java实现插入排序的代码示例:

public static void insertionSort(int[] arr) {
    int n = arr.length;
    for (int i = 1; i < n; i++) {
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

在上面的代码中,我们使用了一个外层循环,它遍历了整个待排序数组。对于数组中的每个元素,我们都将它插入到已排序序列中的正确位置。

在内层循环中,我们从右向左比较已排序序列中的元素,找到插入位置。如果已排序序列中的元素比当前元素大,则将它们向右移动一位,为当前元素腾出插入位置。最后将当前元素插入到正确位置即可。

复杂度分析

插入排序的时间复杂度为O(n^2),空间复杂度为O(1)。当序列基本有序时,插入排序的效率较高,而当序列完全无序时,插入排序的效率很低。因此,插入排序一般适用于小规模的序列排序。

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

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

相关文章

  • Java运行Jar包内存配置的操作

    下面是关于Java运行Jar包内存配置的完整攻略: 一、什么是JVM内存 Java虚拟机(JVM)是一个程序,它能够执行Java字节码。而JVM内部的内存管理,也就是内存分配和垃圾回收机制,对程序的性能和稳定性都有着重要的影响。Java运行时内存主要分为两部分: 堆内存和 非堆内存。 在Java程序运行时,JVM需要分配一定的内存空间用于执行程序。其中,堆内…

    Java 2023年5月26日
    00
  • Java异常类型及处理

    Java异常类型及处理攻略 异常定义 在程序执行时,如果出现某种错误或异常,则会产生异常。Java中所有的异常信息都是用异常类的形式传递的。在Java中,所有异常都是派生于Throwable类(它是 Java 语言中所有错误或异常的超类)的一个子类。它既包括异常(Exception)也包括错误(Error),它们有各自的特点: Exception Excep…

    Java 2023年5月26日
    00
  • Java 格式化输出JSON字符串的2种实现操作

    接下来我将详细讲解“Java 格式化输出JSON字符串的2种实现操作”的完整攻略。 1. JSON格式化输出实现方式 在Java中格式化输出JSON字符串有很多种方式,这里将介绍最常用的两种方式:第一种是使用JSON API手动创建JSON字符串,第二种是使用Jackson、Gson等库自动序列化为JSON字符串。 1.1 使用JSON API手动创建JSO…

    Java 2023年5月26日
    00
  • 关于Java中byte[] 和 String互相转换问题

    byte[] 转 String: 在Java中,将byte[]转换成String有两种方式。 第一种方式是使用String类中的构造函数,将byte[]数组作为参数传入,代码示例如下: java byte[] bytes = new byte[]{97, 98, 99}; String str = new String(bytes); System.out.…

    Java 2023年5月26日
    00
  • Java判断字符串是否含有乱码实例代码

    当检测到非ASCII码字符时,Java中的字符串会采用UTF-16编码。这意味着,如果字符串中存在其他编码类型的非ASCII码字符,那么这些字符就会被认为是乱码。因此,判断一个字符串是否含有乱码需要进行以下操作: 将字符串转化为字节类型; 利用字符编码类型,将字节数组转化为字符串。 以下是一个Java判断字符串是否含有乱码的示例代码: import java…

    Java 2023年5月27日
    00
  • Java超详细讲解接口的实现与用法

    Java超详细讲解接口的实现与用法 什么是接口 在Java中,接口是一个与类有相似结构的抽象数据类型。与类不同的是,它只定义一组规范,而不实现这些规范。接口中定义的方法没有具体的实现逻辑,只是给出了方法的签名与返回值类型。 接口的定义与实现 定义接口可以使用interface关键字,接口中可以定义方法和属性。接口中的方法是公共的(public),没有方法体(…

    Java 2023年5月18日
    00
  • linux中启动tomcat后浏览器无法访问的解决方法

    首先,我们需要明确以下几点: Linux下启动Tomcat后,需要等待一定的时间让Tomcat加载完所有的资源以正常运行。 Tomcat默认的端口为8080,如果端口被其它进程占用,则Tomcat无法正常启动。 防火墙可能会阻止Tomcat的访问。 针对以上问题,以下是完整的处理步骤: 1. 检查Tomcat启动 首先,通过以下命令启动Tomcat:./bi…

    Java 2023年5月19日
    00
  • Jquery在IE7下无法使用 $.ajax解决方法

    在IE7下使用JQuery的$.ajax方法时,可能会出现无法正常工作的问题,一般表现为无法发送请求或接收响应。这是因为IE7的XMLHttpRequest对象不支持跨域请求,而JQuery在IE7中默认使用XMLHttpRequest,导致无法正常工作。 解决这个问题的方法之一是使用IE7支持的ActiveXObject对象。具体步骤如下: 首先需要判断浏…

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