插入排序 - 数据结构与算法 - 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)
性能分析的工具可以使用,下图中的渐进紧确界,渐进上界,渐进下界进行表示,通常使用的是渐进上界即可,因为渐进上界可以代表最坏的运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!