插入排序算法(Java代码实现)

简介: 这篇文章通过Java代码示例详细解释了插入排序算法的实现过程,包括算法的基本思想、核心代码、辅助函数以及测试结果,展示了如何通过插入排序对数组进行升序排列。

其它经典排序算法:https://blog.csdn.net/weixin_43304253/article/details/121209905

插入排序算法:

思路:将数据分为已经排序好的数据和未排序的数据。取出未排序中的数据、从后向前的形式找到其在已经排好序数据中的位置、然后插入该数据。

过程

  • 1、将数据分为已排序和未排序两组。默认第一个数据是已排序
  • 2、从未排序数据中从前往后的顺序取出数据、和已经排好序的数据比较(从后向前比较)
  • 3、如果取出的未排序数据小于拍好序的数据、则将拍好序的数据向后移动
  • 4、找到当前的未排序数据在排序好数据中的插入位置、放入该数据
  • 5、再次从未排序数据中取出下一个数据、重复2-5

图解过程

在这里插入图片描述
代码实现

package com.zheng.dao;

import java.util.Random;


//插入排序算法
public class TestInsertDemo {
    /**
     * 1、思想:将数据分为已经排序好的数据和未排序的数据。取出未排序中的数据、从后向前的形式找到其在已经排好序数据中的位置、然后插入该数据
     */

    public int[] insertArr(int[] arr) {
        int len = arr.length;
        if (len < 0) { //数组长度为零、返回null
            return null;
        } else {

            for (int i = 0; i < len - 1; i++) {
                int current = arr[i + 1];//已经拍好序的下一个元素位置。(还未进行排序的第一个位置)
                int index = i;
                //然后将这个元素和之前拍好序的数组进行比较、将该数据放入合适的位置
                while (index >= 0 && current < arr[index]) {//如果当前的数据比拍好序列的最后一个数据小
                    arr[index + 1] = arr[index];//将当前的数据向后移动一位
                    index--;
                }
                arr[index + 1] = current;//经过一轮的比较、找到放入新数据的位置
            }

        }

        return arr;
    }


    //随机生成一个数组
    public int[] randomArr(int len, int maxNum, int minNum) {
        int[] arr = new int[len];//定义一个一维数组
        Random random = new Random();
        for (int i = 0; i < len; i++) {
            arr[i] = random.nextInt(maxNum - minNum + 1) + minNum;
        }
        return arr;
    }

    //打印
    private void Print(int[] arr) {
        int len = arr.length;
        System.out.print("【");
        for (int i = 0; i < len; i++) {
            if (i == len - 1) {
                System.out.print(arr[i]);
            } else {
                System.out.print(arr[i] + "、");
            }
        }
        System.out.println("】");
    }


    public static void main(String[] args) {
        TestInsertDemo testInsertDemo = new TestInsertDemo();

        int[] arr = testInsertDemo.randomArr(10, 100, 50);
        System.out.print("生成的随机数组:");
        testInsertDemo.Print(arr);
        System.out.print("选择排序后数据:");
        testInsertDemo.insertArr(arr);
        testInsertDemo.Print(arr);

    }
}

测试1:
在这里插入图片描述
测试2:
在这里插入图片描述
测试3:
在这里插入图片描述

相关文章
|
Java 开发工具
【Azure Storage Account】Java Code访问Storage Account File Share的上传和下载代码示例
本文介绍如何使用Java通过azure-storage-file-share SDK实现Azure文件共享的上传下载。包含依赖引入、客户端创建及完整示例代码,助你快速集成Azure File Share功能。
773 6
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
961 0
|
Java 数据处理 API
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
为什么你的Java代码应该多用Stream?从循环到声明式的思维转变
477 115
|
安全 Java 编译器
为什么你的Java代码需要泛型?类型安全的艺术
为什么你的Java代码需要泛型?类型安全的艺术
377 98
|
安全 Java 容器
告别繁琐判空:Optional让你的Java代码更优雅
告别繁琐判空:Optional让你的Java代码更优雅
|
安全 Java 容器
告别空指针噩梦:Optional让Java代码更优雅
告别空指针噩梦:Optional让Java代码更优雅
609 94
|
Java 编译器 API
java最新版和java8的区别,用代码展示
java最新版和java8的区别,用代码展示
794 43
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
555 8
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
738 8
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
759 2