[排序算法]插入排序法

目录

1.基本思想

2.冒泡排序的步骤

3.冒泡排序算法的实现

4.时间复杂度分析

5.总结

PS:如有错漏之处,敬请指正


1.基本思想

插入排序(Insertion Sort)是一种简单直观的排序算法,它的基本思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

2.冒泡排序的步骤

以下是插入排序的详细步骤:

  1. 将第一个元素视为已排序序列:在排序开始时,我们通常认为第一个元素是一个已经排序好的序列。

  2. 从第二个元素开始遍历:将第二个元素作为"key"(即待插入元素)。

  3. 比较"key"与已排序序列:从已排序序列的最后一个元素开始,向前遍历比较,找到"key"应该插入的位置。

  4. 插入"key":将"key"插入到已找到的位置,使得插入后该位置及其后的元素仍然有序。

  5. 重复步骤2-4:将下一个元素作为新的"key",重复上述过程,直到所有元素都被插入到正确的位置。

  6. 完成排序:当所有元素都被插入到已排序序列中时,整个序列就被排序完成了。

3.冒泡排序算法的实现

java 复制代码
package com.test.demo;

/**
 * 插入算法
 */
public class InsertSortExample {

    public static void main(String[] args)
    {
        int[] numbers = {64, 34, 25, 12, 22, 11, 90};
        insertSort(numbers);
        System.out.println("Sorted array: ");
        for (int number : numbers) {
            System.out.print(number + " ");
        }
    }

    public static void insertSort(int[] array){
        int tmp;
        int j;
        // 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的
        for (int i=1,len = array.length;i<len;i++){
            //记录要插入的数据
            tmp=array[i];
            // 从已经排序的序列最右边的开始比较,找到比其小的数
            j=i;
            while (j>0 && tmp<array[j-1]){
                array[j]= array[j-1];
                j--;
            }
            // 存在比其小的数,插入
            if(j !=i){
                array[j] = tmp;
            }

        }

    }
}

4.时间复杂度分析

插入排序的时间复杂度为O(n^2),其中n是序列的长度。这是因为算法需要进行n-1次插入操作,每次插入操作平均需要比较n项。

5.总结

尽管插入排序在最坏情况下效率不高,但它对于小型数据集或基本有序的数据集非常有效。插入排序的优点包括:

  • 稳定性:可以保证相等的元素在排序后保持原来的相对顺序。
  • 原地排序:不需要额外的存储空间。
  • 简单性:算法实现简单,易于理解和编程。

插入排序通常用作其他更高级排序算法(如归并排序和快速排序)的辅助方法,尤其是在处理小型数组或数组的子部分时。

PS:如有错漏之处,敬请指正

相关推荐
Jabes.yang16 小时前
Java电商订单系统面试全流程解析:接口设计、数据库、微服务与分布式事务实战
java·微服务·mybatis·分布式事务·电商·订单系统·接口设计
码语智行16 小时前
导入模板下载
java
大雨淅淅16 小时前
【机器人】ROS2 机械臂控制(MoveIt2)从入门到实战
人工智能·python·神经网络·学习·算法·机器学习·机器人
摇滚侠17 小时前
IDEA 创建 Java 项目 推送到远程 Git 仓库
java·git·intellij-idea
可乐ea17 小时前
【知识获取与分享社区项目 | 项目日记第 24 天】终章总结:从认证、发布、计数、Feed、搜索到 RAG:完整复盘一个知识社区后端系统
java·spring boot·redis·mysql·elasticsearch·ai·kafka
Jabes.yang17 小时前
Java面试实录:AIGC场景下的Stream、微服务、Redis、Kafka与安全实战
java·spring boot·redis·微服务·面试·kafka·aigc
lwf00616417 小时前
实战:用 Java 模拟登录阿里云控制台,爬取没有 OpenAPI 的数据
java·阿里云
智者知已应修善业17 小时前
【51单片机0.1秒计时到21.0时点亮LED】2024-1-5
c++·经验分享·笔记·算法·51单片机
程序员二叉17 小时前
【Java】 面试核心合集:BigDecimal、缓存池、多态、反射全解析
java·缓存·面试
apcipot_rain17 小时前
计科八股20260606——二叉树、PCA、图深度学习、进程上下文、C语言预编译、文件读写、单精度浮点数
c语言·数据结构·算法·pca·图神经网络