算法------排序算法------插入排序法

介绍

插入排序法是将数组中的元素逐一已排好序的数据进行比较,先将前两个元素排好序,再将第三个插入适当的位置,以此类推,重复此步骤,知道排完序为止。下面以图展示:
算法------排序算法------插入排序法_第1张图片

插入排序算法分析

  • 最坏情况和平均情况需比较(n-1)(n-2)(n-3)…+3+2+1=n(n-1)/2次,时间复杂度为O(n^2);最好情况下时间复杂度为O(n).
  • 插入排序是稳定排序法
  • 因为只需要一个额外的空间,所以空间复杂度最佳
  • 适用于大部分数据已经排序的情况,也适用于排序数据库中添加新数据再进行排序的情况
  • 由于插入排序会造成大量的数据迁移,因此建议在链表上使用。

代码实现

package com.lifly.algorithm.sort;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @Author: LiFly
 * @Date: 2023/6/26 21:15
 * @Description: 插入排序
 */
public class InsertSort {

    public static void main(String[] args) {
        int[] data = new int[5];
        InsertSort insertSort = new InsertSort();
        System.out.println("请输入原始数组: ");
        insertSort.input(data);
        insertSort.printData(data);
        insertSort.insertSort(data);


    }

    /**
     * 输入参数
     *
     * @param data
     */
    public void input(int[] data) {
        for (int i = 0; i < data.length; i++) {
            try {
                System.out.println("请输入第" + (i + 1) + "个元素");
                InputStreamReader reader = new InputStreamReader(System.in);
                BufferedReader bufferedReader = new BufferedReader(reader);
                data[i] = Integer.parseInt(bufferedReader.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 打印参数
     *
     * @param data
     */
    public void printData(int[] data) {
        for (int i = 0; i < data.length; i++) {
            System.out.print(data[i] + " ");
        }
        System.out.println("\n");
    }

    /**
     * 插入排序
     *
     * @param data
     */
    public void insertSort(int[] data) {
        for (int i = 0; i < data.length; i++) {
            int temp = data[i];
            int j = i - 1;
            //如果第二个元素小于第一个元素
            while (j >= 0 && temp < data[j]) {
                //把所有元素后移一个位置
                data[j + 1] = data[j];
                j--;
            }
            //最小的元素放到第一个元素
            data[j + 1] = temp;
            System.out.print("第" + i + "次扫描:");
            printData(data);
        }
    }
}

结果打印
算法------排序算法------插入排序法_第2张图片
插入排序算法到此就结束了。如果觉得笔者写的能让你学到点东西,麻烦点个关注,感激不尽。喜欢看微信公众号的也可以搜索微信公众号liflyCode那里也有收录

你可能感兴趣的:(算法,java,排序算法,算法,java,插入排序)