插入排序算法

简介: 插入排序算法

文章目录

  1. 算法思想
  2. 算法图解
  3. 代码实现
  4. 算法特点
  5. 算法思想
  1. 算法图解

int[] array = {4,5,2,6,8,7};
以数组array为例分析

for 循环开始,直到i=1,即preIndex=1

45是有序的,preIndex指向5,currentValue指向2,2小于5并且小于4,将两个元素分别后移一位,并且preIndex自减两次为-1,此时找到插入的位置为preIndex+1,即0位置插入2

 循环继续,preIndex指向8,currentValue指向7,7小于8,将8后移一位,并且preIndex自减一次为3,找到插入的位置为preIndex+1,即4位置插入7

至此排序完成

  1. 代码实现

代码:

import java.util.Arrays;
public class InsertionSort {

public int[] sortArray(int[] nums){
    if(nums.length==0){
        return nums;
    }
    int currentValue;//存放当前值,当前值前的数据已经有序
    for (int i = 0; i < nums.length-1; i++) {
        int preIndex = i;//已被排序的数据的索引
        currentValue = nums[preIndex + 1];
        //在已排序的数据中倒序寻找比当前数据小的数据,将其后移一位
        while(preIndex>=0 && currentValue < nums[preIndex]){
            nums[preIndex+1] = nums[preIndex];
            preIndex--;
        }
        //程序走到这里,已经找到合适的插入位置,将当前数据插入
        nums[preIndex+1] = currentValue;
        System.out.println("本轮插入后的数组");
        System.out.println(Arrays.toString(nums));
    }
    return nums;
}

public static void main(String[] args) {
    int nums[] = {3,4,5,2,1,6,10,8};
    InsertionSort insertionSort = new InsertionSort();
    insertionSort.sortArray(nums);
    System.out.println("排序结束");
    System.out.println(Arrays.toString(nums));
}

}

  1. 算法特点

特点:稳定,相对顺序不会变,在序列基本有序的情况下,排序时间短;最差的情况应该是将序列倒序变成顺序

适用场景:数据基本有序,小数组,要求稳定

时间复杂度:最坏情况下为O(N2),此时待排序列为逆序,或者说接近逆序
      最好情况下为O(N),此时待排序列为升序,或者说接近升序
空间复杂度:O(1)

相关文章
|
4天前
|
搜索推荐 算法 Java
Java数据结构与算法:排序算法之插入排序
Java数据结构与算法:排序算法之插入排序
|
10天前
|
机器学习/深度学习 算法 搜索推荐
数据结构算法--2 冒泡排序,选择排序,插入排序
**基础排序算法包括冒泡排序、选择排序和插入排序。冒泡排序通过相邻元素比较交换,逐步将最大值“冒”到末尾,平均时间复杂度为O(n^2)。选择排序每次找到剩余部分的最小值与未排序部分的第一个元素交换,同样具有O(n^2)的时间复杂度。插入排序则类似玩牌,将新元素插入到已排序部分的正确位置,也是O(n^2)复杂度。这些算法适用于小规模或部分有序的数据。**
|
19天前
|
算法 搜索推荐
数据结构与算法-插入排序
数据结构与算法-插入排序
12 2
|
21天前
|
算法 搜索推荐 数据可视化
【漫画算法】插入排序:插入宝石的传说
【漫画算法】插入排序:插入宝石的传说
|
4天前
|
人工智能 搜索推荐 JavaScript
心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)
心得经验总结:排序算法:插入排序法(直接插入法和希尔排序法)
10 0
|
6天前
|
机器学习/深度学习 搜索推荐 算法
【C/排序算法】:直接插入排序和希尔排序
【C/排序算法】:直接插入排序和希尔排序
8 0
|
10天前
|
搜索推荐 算法
排序算法之插入排序
排序算法之插入排序
16 0
|
14天前
|
搜索推荐
排序算法---插入排序-----详解&&代码
排序算法---插入排序-----详解&&代码
|
24天前
|
人工智能 算法 C语言
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
18 0
|
2月前
|
搜索推荐 算法 Java
sort-05-insert sort 插入排序算法详解
这是一个关于排序算法的系列文章总结,包括冒泡排序、快速排序、选择排序、堆排序、插入排序等10种排序算法的详细讲解和Java实现。插入排序是一种简单直观的排序算法,通过构建有序序列并逐个插入新元素来排序。提供的Java代码展示了插入排序的实现过程,并附有测试示例。所有算法已开源在GitHub项目[https://github.com/houbb/sort](https://github.com/houbb/sort)中。