ACM教程 - 插入排序

简介: ACM教程 - 插入排序

定义

选择排序是一种简单直观的排序算法,其基本原理是每一次从待排序的数组里找到最小值(最大值)的下标,然后将最小值(最大值)跟待排序数组的第一个进行交换,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。反复的进行这样的过程直到待排序的数组全部有序。

  • 稳定性:根据 相等元素 在数组中的 相对顺序 是否被改变,排序算法可分为「稳定排序」和「非稳定排序」两类。
  • 就地性:根据排序过程中 是否使用额外内存(辅助数组),排序算法可分为「原地排序」和「异地排序」两类。一般地,由于不使用外部内存,原地排序相比非原地排序的执行效率更高。
  • 自适应性:根据算法 时间复杂度 是否 受待排序数组的元素分布影响 ,排序算法可分为「自适应排序」和「非自适应排序」两类。「自适应排序」的时间复杂度受元素分布影响,反之不受其影响。
  • 比较类:比较类排序基于元素之间的 比较算子(小于、相等、大于)来决定元素的相对顺序;相对的,非比较排序则不基于比较算子实现。

图解f6f0e55388dd4c3fb5043e7cb749e2cd.gif

性质

  • 时间复杂度
  • 最佳 O(n)
  • 平均 O()
  • 最差 O()
  • 空间复杂度
  • 最差 O(1)
  • 稳定性:稳定
  • 就地性:原地
  • 自适应性:自适应
  • 比较类:比较

Java

publicclassinsertSort {
publicstaticvoidmain(String[] args) {
int[] num= {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};
intj;
// i=1; 从 1 开始, 没必要和自己比for (inti=1; i<num.length; i++) {
// 记录要插入的值, 这时就有了一个长度为 i+1 的数组可以进行移动inttemp=num[i];
// 在已排序的数组中找到比记录值(temp)要小的值, 位置往后移动(记住此时的数组长度(i+1))for (j=i-1; j>=0&&num[j] >temp; j--) {
// 符合条件的往后移动一位num[j+1] =num[j];
            }
// 归位, 此时符合条件的都全部移动了一位, 此时的 j+1 就是记录值要插入的位置num[j+1] =temp;
        }
System.out.println(Arrays.toString(num));
    }
}
目录
相关文章
|
4月前
|
存储 搜索推荐 算法
归并排序算法
归并排序是一种基于分治思想的高效排序算法,通过将序列不断划分为不可再分的子序列,再两两合并完成排序。其时间复杂度为O(nlogn),适用于对序列进行升序或降序排列。
269 0
|
弹性计算 关系型数据库 应用服务中间件
从零基础到博主大亨!一键解锁阿里云ECS,LNMP秒搭WordPress,你的个性博文帝国,今日崛起!
【8月更文挑战第5天】随着互联网技术的发展,个人博客成为技术爱好者和内容创作者分享知识的平台。阿里云ECS以其高性能和灵活性成为搭建博客的优选。本文指导你购买配置ECS,并安装CentOS 7。通过SSH登录后,更新系统并安装LNMP环境,包括Nginx、MariaDB、PHP。配置Nginx处理PHP请求,初始化数据库并设置WordPress数据库。接着下载WordPress,解压并设置权限。最后,通过浏览器完成安装向导。利用WordPress丰富的资源定制网站,开启个性化创作之旅。记得定期备份数据,利用ECS的扩展性支持网站成长。
293 4
|
12月前
|
人工智能 自然语言处理 API
吴恩达开源aisuite:简化AI模型调用的新工具 | AI工具
近日,著名人工智能学者吴恩达教授在推特上宣布了他的最新开源项目——aisuite。这款全新的Python包旨在简化开发者与各大AI模型服务商的集成过程,极大提升了应用开发的效率。aisuite的推出,无疑为人工智能领域的开发者带来了一个强大而便利的工具。
555 5
|
监控 API 开发工具
探索 Postman:API 开发的瑞士军刀
在现代软件开发中,API 起着关键作用,连接前后端应用及微服务架构。Postman 是一款流行的一站式 API 开发工具,支持 REST、GraphQL 和 SOAP 等协议,具备构建、测试、调试 API 的强大功能,包括请求构建器、环境变量管理、测试脚本编写、文档生成及 Mock 服务器创建等。本文详细介绍 Postman 的核心功能与进阶技巧,助你提高 API 开发效率。
|
NoSQL Java Redis
蓝易云 - redisson参数配置
以上是Redisson的一些基本参数配置,具体的配置可能会根据你的应用需求有所不同。在配置Redisson时,你应该根据你的应用的特性和需求来选择合适的参数。
432 0
电力系统潮流计算及不对称短路分析【程序+报告】
电力系统潮流计算及不对称短路分析【程序+报告】
|
存储 分布式计算 负载均衡
Hadoop性能优化合理的分区策略
【6月更文挑战第9天】
136 2
|
机器学习/深度学习 数据可视化 计算机视觉
机器学习中的数学原理——线性可分问题
机器学习中的数学原理——线性可分问题
918 0
机器学习中的数学原理——线性可分问题
|
机器学习/深度学习 人工智能 算法
强化学习从基础到进阶-案例与实践[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验
强化学习从基础到进阶-案例与实践[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验
强化学习从基础到进阶-案例与实践[1]:强化学习概述、序列决策、动作空间定义、策略价值函数、探索与利用、Gym强化学习实验
|
vr&ar 开发工具 iOS开发
visionOS空间计算实战开发教程Day 1:环境安装和编写第一个程序
截至目前visionOS还未在Xcode稳定版中开放,所以需要下载Xcode Beta版。比如我们可以下载Xcode 15.1 beta 2,注意Xcode 15要求系统的版本是macOS Ventura 13.5或更新,也就是说2017年的MacBook Pro基本可以勉强一战,基本上还是推荐使用M系列芯片的电脑进行开发。
287 0