当前位置: 首页 > article >正文

数据结构--插入排序

一、算法思想:

每次将一个待排序的记录按其关键字大小插入到前面已经排好序的子序列中

例如:把13拿出来不断的进行比较再左移

二、代码实现(一):每一个元素拿出来与它的前后进行对比

用 temp 存储当前拿出来的元素:防止操作时候被覆盖

注意循环中的:

for(j=i-1;j>=0 && A[j] > temp; --j)
{
    A[j+1] = A[j]  //j+1 == i(当前处理的元素位置)  j == i-1(这个大于当前处理元素的元素位置)
 }                 //前一位赋值给后一位
  
 A[j+1] = temp

代码实现(二):哨兵实现 

把当前处理的元素放到最开头 A[0] 的位置

三、算法的空间复杂度:

O(1): 因为我们用的方法不是temp就是哨兵,都是常数级别的,所以所占的空间就是1

四、算法的时间复杂度:

O(n) : 需要 n-1 趟的对比判断------最好的情况下

O(n²):------ 原本就是逆序排列的 ------最坏的情况下

五、优化操作

(图中蓝色数字是要插入的元素,

          绿色是已经有的序列,

          红色是复制要插入的元素)

折半查找

例如处理60 的时候

第一个被检查的位置是50

50 < 60 

low = mid + 1

mid = (low + high) / 2 -----检查的是60

60 == 60 ------- 当找到当前处理元素的值相同时,继续在mid所指右边查找

high < low 的时候,停止查找 

六、对链表的插入排序


http://www.kler.cn/a/444164.html

相关文章:

  • CarWatchdog
  • Restaurants WebAPI(二)——DTO/CQRS
  • javax.net.ssl.SSLPeerUnverifiedException: Hostname 192.168.13.13 not verified:
  • mfc140u.dll是什么文件?如何解决mfc140u.dll丢失的相关问题
  • 【ELK】Filebeat采集Docker容器日志
  • 【图像配准】方法总结
  • JAVA开发时获取用户信息失败,分析后端日志信息
  • spring @Mapper Converter转换泛型异常
  • Kafka Streams 在监控场景的应用与实践
  • 使用正则表达式提取PDF文件页数的实现方案
  • 观察者模式(sigslot in C++)
  • docker pull 报错Get “https://registry-1.docker.io/v2/“: net/http: request canceled while waiting for c
  • CSS学习-第三天
  • 基于springboot的在线政务服务系统的设计与实现-仅供学习
  • 实景视频与模型叠加融合?
  • YOLOv8改进 | 损失函数 | 结合NWD的Shape-IoU【全网独家】
  • 广场维修:JAVA
  • Reactor 响应式编程(第三篇:R2DBC)
  • 大数据治理:构建数据驱动的智慧教学体系
  • 利用两种方式分别实现单例模式(懒汉式、饿汉式)
  • kafka 本地 windos部署详细教学,轻松使用本地kafka进行消息推送接收!
  • MQTT协议介绍与C++服务端客户端实现
  • Qt5与Qt6中的高DPI缩放属性解析
  • mysql中与并发相关的问题?
  • matlab的一些时间函数【转】
  • AGM FPGA如何配置上拉或者下拉电阻