插入排序 - 数据结构与算法 - java

1、算法核心

1、把需要排序的数组看作是排好序的和没有排好序的两类数组;
2、遍历数组,将没有排好序的数组部分插入到排好序的数组部分;
3、找位置的时候,在排好序的数组部分找到刚好比待插入的数字小一点点的数组,记录位置,把其位置后面的元素全部后移,让出来位置;
4、将待插入元素插入;

2、实现代码

package com.luobin.DataStructure.排序;

/**
 * @author LuoBin
 * @version 1.0
 * @date 2021/8/8 8:45 下午
 */
public class Insert {
    public static void main(String[] args) {

        int[] testInsert = new int[]{0, 1, 2,9,3,2,1};
        insertionSort(testInsert);

    }

    public static int[] insertionSort(int[] array) {
        int len;
        // 基本情况下的数组可以直接返回
        if(array == null || (len = array.length) == 0 || len == 1) {
            return array;
        }
        int current;
			// 	对于循环的次数,第一个不用排,需要 len - 1 次循环
        for (int i = 0; i < len - 1; i++) {

            // 第一个数默认已排序,从第二个数开始
            current = array[i + 1];

            // 前一个数的下标
            int preIdx = i;

            // 拿当前的数与之前已排序序列逐一往前比较,
            // 将前面已经排好序的数字与需要插入的数字进行比较,当插入的数字比排好序的某个数字刚好大一点儿的时候,说明找到了位置,把“某个数字后面的元素全部向后移动,腾出来位置”
            while (preIdx >= 0 && current < array[preIdx]) {

                // 把比插入的数字大的数往后面放一放,腾出来位置,放置新的元素
                array[preIdx + 1] = array[preIdx];
                preIdx--;
            }

            // while循环跳出说明找到了位置
            array[preIdx + 1] = current;
        }

        for (int i = 0;i < array.length;i++) {
            System.out.println("进行排序之后的算法是:" + i);
        }
        return array;
    }
}

3、性能分析

时间复杂度:O(n^2)
性能分析的工具可以使用,下图中的渐进紧确界,渐进上界,渐进下界进行表示,通常使用的是渐进上界即可,因为渐进上界可以代表最坏的运行结果
在这里插入图片描述
在这里插入图片描述

posted @   YIMENG-0  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示