插入排序

news/2024/10/7 12:17:34

插入排序简单来说 假设数组第一个元素为一个有序序列 然后将后面的无序序列依次与第一个元素比较 更具大小决定待插入元素插入的位置。
、、、
// 插入排序 是吧无序序列中的元素依次插入到有序序列中,一般是从有序序列的尾部开始比较
void InsertSort(int buf[10], int bufsize)
{
int temp = 0; // 用于备份当前待插入元素的值
int current_prev = 0; // 备份待插入元素的下标(2)

// 可以假设把数组中的第一个元素座位有序序列的元素,剩下的元素作为无序序列
for (int i = 1; i < bufsize; ++i)    //(1)
{temp = buf[i]; // 备份当前待插入元素的值// 把当前待插入元素和有序序列中的元素依次进行比较,从有序序列尾部开始for (int j = i - 1; i >= 0; j--){if (temp < buf[j]) // 当前插入元素的值 小于待插入元素的直接前驱元素的值{current_prev = j;    // 备份当前待插入元素的直接前驱的下标(3)buf[j + i] = buf[i]; // 后移}else{current_prev = j + i;break;}}// 把待插入元素插入指定位置buf[current_prev] = temp;
}

}、、、
本题需要思考的两个问题
1.为何 (1)int i 从1 开始i++
答:已经假设了第一个下标为0 的元素为一个有序数列 没必要自己和自己再比较
2.为何 (2)(3)要对待插入元素的下标进行备份?
答:如图这种情况


会发现插入之前 i=1 j=0,当j进行j--时 j=-1 ,不满足第二个for循环,下标为负数没有意义 ,知道temp=3但是不知道它插入位置的下标。
此时在第二个for循环中备份 j=0当前下标的地址[current_prev] temp就有目标元素下标进行插入 ,j等于-1则不进入第2个for循环 。****

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/28273.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

删除字符串中与另一个字符串中的相同字母的自定义函数

#include <stdio.h> /********************************************************************* 函数名称: str_DestDel* 函数功能: 删除一个字符串中与另一个字符串中的相同字母并且不区分大小写* 函数参数:* @strA 需要操作的字符串* @strB 作为参考的字符串…

SwiftUI Text 文字处理

代码// // ContentView.swift // SwiftUIText // // Created by CHEN Hao on 2024/5/6. //import SwiftUIstruct ContentView: View {var body: some View {VStack{Text("Your time is limited, so don’t waste it living someone else’s life. Don’t be trapped by…

情感分词新手实践

Tutorial for Sentiment AnalysisAmazon Full Review 情感分析任务 input: Remark Text output: Sentiment(\(\{-1, 0, 1\}\)) convert to \(\{0, 1, 2\}\) for calculating accuracy Mark: 之前没有用 torch 做过 NLP,因此相当于一个 tutorial 数据准备工作文本分词NLP 需要将…

生活常见物理层接口(除去网线)

生活物理层接口 1.USB接口 秒懂所有USB接口类型,USB接口大全;Type-A、Type-B、Type-C、miniUSB、microUSB区分-知乎追风少年上图漏掉了苹果的lightning接口,又叫闪电接口USB-A全称USB Type-A口,俗称USB接口是最常见的接口,如下图左侧接口内部舌头非蓝色的是USB2.0,右侧蓝…

测试分类

单元测试:针对程序的最小单元来进行正确性检验的测试工作,包括类、方法等。(严格来说,单元测试只针对【功能点】进行测试,不包括对业务流程正确性的测试) 功能测试/接口测试:测试接口的功能是否正确。【接口,输入输出】 端到端测试:模拟真实用户的请求(客户端--服务端…

Linux学习第二天

今天学习linuxC编程。首先要熟悉linux下编写c程序的过程。 编写程序Hello World! 首先创建存放程序的文件夹,如下图所示:接下来在创建一个文件夹来保存这节要编写的代码。指令:mkdir 3.1接下来我们要设置VIM编辑器的一些配置,比如设置tab的字符数为4、以及设置VIM编辑器的行…

《线性代数的本质》笔记10

10-特征值与特征向量特征向量几何含义:在一次特定的线性变换中没有脱离原本张成空间的向量。特征值即为这个特征向量在这次变换中缩放的比例。 推导: $$ A\vec{v}=\lambda\vec{v} $$ $$(A-\lambda\textit{I})\vec{v}=\vec{0}$$ $$det(A-\lambda\textit{I})=0$$ 但并非所有线…

目录遍历-基于Pikachu的学习

目录遍历 原理 目录浏览漏洞是由于网站存在配置缺陷,存在目录可浏览漏洞,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件、配置文件等,攻击者利用该信息可以更容易得到网站权限,导致网站被黑。 Pikachu 打开题目就是两个超链接,我随便点了一个发现url发现变化,有…