插入排序——直接插入排序

server/2024/11/19 9:42:11/

插入排序——直接插入排序

7.4 插入排序——直接插入排序

插入排序基本思想:

直接插入排序是一种简单的插入排序法,其基本思想是:

把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列

实际中我们玩扑克牌时,就用了插入排序的思想。
请添加图片描述

直接插入排序

当插入第 i ( i ≥ 1 ) i(i\geq1) i(i1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移。

如下面动图所示:
请添加图片描述

以及这个样例:

8
36 25 48 12 65 43 20 580:[36] 25 48 12 65 43 20 581:[25 36] 48 12 65 43 20 582:[25 36 48] 12 65 43 20 583:[12 25 36 48] 65 43 20 584:[12 25 36 48 65] 43 20 585:[12 25 36 43 48 65] 20 586:[12 20 25 36 43 48 65] 587:[12 20 25 36 43 48 58 65]

根据分析的信息,给出两种参考程序,他们的思路是一样的。

参考程序

参考程序1:

void insertSort(int* a, int n) {for (int i = 0, j, k, temp; i < n; i++) {for (j = i - 1; j >= 0; j--)if (a[j] < a[i])//修改这里的比较运算符为<=能使算法不稳定break;if (j != i - 1) {temp = a[i];for (k = i - 1; k > j; k--)a[k + 1] = a[k];a[k + 1] = temp;}}
}

参考程序2:

void InsertSort(int* a, int n) {for (int i = 0; i < n - 1; ++i) {// [0, end] 有序,插入tmp依旧有序int end = i;//int end;表示单趟,int end=i;和for表示整个过程int tmp = a[i + 1];while (end >= 0) {if (a[end] > tmp) {//修改这里的比较运算符为>=能使算法不稳定a[end + 1] = a[end];--end;}elsebreak;}a[end + 1] = tmp;}
}

直接插入排序的特性总结

  1. 元素集合越接近有序,直接插入算法>排序算法时间效率越高

  2. 时间复杂度: O ( N 2 ) O(N^2) O(N2)(两层for循环,尽管存在剪枝但不影响整体效率低)

  3. 空间复杂度: O ( 1 ) O(1) O(1)

  4. 它是一种稳定的算法>排序算法,因为在排序过程中,它是将未排序元素插入到已排序序列的合适位置。尽管我们能通过修改判断关键字大小的判断原理来使得它不稳定,但不影响这种交换机制使得直接插入排序是稳定的。


http://www.ppmy.cn/server/143145.html

相关文章

reactflow 中 useNodesState 模块作用

1. 节点状态管理核心功能 useNodesState是一个关键的钩子函数&#xff0c;用于专门管理节点&#xff08;Nodes&#xff09;的状态。节点是流程图的核心元素&#xff0c;它们可以代表各种实体&#xff0c;如流程中的任务、系统中的组件或者数据结构中的元素。 useNodesState提…

常见的网络协议汇总(涵盖了不同的网络层次)

网络层协议 IP协议&#xff1a;IP指网际互连协议&#xff08;Internet Protocol&#xff09;&#xff0c;是TCP/IP体系中的网络层协议。IP协议包括IPv4和IPv6&#xff0c;用于为数据包提供源地址和目标地址&#xff0c;从而实现网络通信。ICMP协议&#xff1a;ICMP&#xff08…

OpenHarmony-2.DeviceInfo适配

DeviceInfo适配说明 1.启动子系统设备信息说明 2.OHOS 2.1.OHOS 固定值参数适配 OHOS 固定值参数: const.ohos.version.security_patch const.ohos.releasetype const.ohos.apiversion const.ohos.fullname适配说明&#xff1a; OHOS 固定值参数由OHOS系统填充&#xff0…

解决 electron 打包后部分电脑报错 Error: Dynamic Symbol Retrieval Error: Win32 error 126

electron 开发使用了 ffi-napi 来调用了 C 函数的 dll 文件&#xff0c;在打包上线后&#xff0c;发现某些电脑上运行之后一直报错 Error: Dynamic Symbol Retrieval Error: Win32 error 126 如图所示&#xff1a; 排查了很多原因&#xff0c;有说是路径问题&#xff0c;有说…

Lua资料

Lua脚本语言 cheet sheet Lua & c Lua与C API交互全面解析 Lua语言&#xff1a;和C语言的交互 Lua进阶用法之Lua和C的接口设计 Lua C API 简介 C和Lua之间的相互调用 深入Lua&#xff1a;用户数据userdata 基本数据类型 之 UserData calling-lua-from-c/ Embedding Lua i…

OPC UA 服务器

OPC UA&#xff08;OPC Unified Architecture&#xff09; 是一种平台无关的通信协议&#xff0c;广泛用于工业自动化领域。它由 OPC 基金会开发&#xff0c;主要设计目标是实现安全、可靠和互操作性的数据交换&#xff0c;适用于各种设备和系统之间的通信。 什么是 OPC UA 服务…

剧本杀门店预约小程序,解锁沉浸式推理体验

一、开发背景 剧本杀作为一种热门娱乐游戏&#xff0c;深受大众的欢迎&#xff0c;但随着市场的快速发展&#xff0c;竞争也在不断加大&#xff0c;对于剧本杀线下商家来说面临着发展创新。 剧本杀线下门店数量目前正在逐渐增加&#xff0c;竞争激烈&#xff0c;而门店的获客…

SpringBoot 中常见的设计模式

在 Spring Boot 中&#xff0c;很多设计模式是通过 Spring 框架本身来实现的&#xff0c;但我们也可以在实际开发过程中看到多种设计模式的应用。以下是几个常见的设计模式及其在 Spring Boot 中的应用实例&#xff1a; 1. 单例模式 (Singleton Pattern) 在 Spring 中&#x…