插入排序算法(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:
在这里插入图片描述

posted on 2022-08-28 22:19  热爱技术的小郑  阅读(55)  评论(0编辑  收藏  举报