1_插入排序_循环不变式

01_插入排序

#include<stdio.h>void insert_sort(int arr[], int n);
void printArray(int arr[], size);int main()
{int arr[] = {1, 2, 3, 22, 5, 9};int n = sizeof(arr) / sizeof(arr[0]);printf("打印原始数组:\n");prinfArray(arr, n);insert_sort(arr, n);printf("打印排序后的数组: \n");
}void insert_sort(int arr[], int n)
{int i, key, j;for(i = 1; i < n; i++){key = arr[i];j = i -1;while(j >= 0 && arr[j] > key){arr[j+1]  = arr[j];j = j - 1;}arr[j + 1] = key;}
}void printArrray(int arr[], int size)
{int i;for (i = 0; i < size; i++){printf("%d ", arr[i]);}printf("\n");
}

分析

notion

循环不变式:

循环不变式是在每次循环迭代开始时都保持为真的条件。通过证明循环不变式在每次迭代中都成立,我们可以证明算法在终止时得到正确的结果

  1. 初始化:

    循环的第一次迭代之前,不变式成立。这通常是在进入循环之前的一些初始条件或初始化步骤

  2. 保持:

    证明如果在某次迭代开始时不变式成立,那么在这次迭代结束后仍然成立。这涉及证明循环体的执行不会破坏不变式

  3. 终止:

    证明当循环终止时,不变式结合循环终止条件能推出算法的正确性。也就是说,不变式和终止条件共同表明算法已经得到了正确的结果

插入排序中的循环不变式

  1. 初始化:

    在第一次迭代中,子数组arr[0]只包含一个元素,它显然是已排序的。因此,循环不变式在循环开始前成立

  2. 保持:

    假设某次迭代开始,子数组arr[0, … i-1]是已经排序的(即不变式成立);

    那么然后在这次迭代中,算法会将arr[i]插入到已排序的子数组arr[0, … i-1]中,使得子数组arr[0, … i]依旧是已经排序的;

    通过内部的while循环,算法会找到适当的位置插入arr[i], 并保持已经排序部分的顺序不变,因此,在这次迭代结束后,子数组arr[0, …i]是已经排序的(即循环不变式依旧保持);

  3. 终止:

    当循环终止时,‘i’ 达到了’n’, 即整个数组arr[0, … n-1]都是已拍寻的。此时,循环不变式结合终止条件表明整个数组是已排序的,从而证明算法的正确性

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

湖北大学2024年成人高考函授报名专升本市场营销专业介绍

在璀璨的学术殿堂中&#xff0c;湖北大学如同一颗璀璨的明珠&#xff0c;熠熠生辉。为了满足广大社会人士对于继续深造、提升自我、实现职业梦想的渴望&#xff0c;湖北大学特别开设了成人高等继续教育项目&#xff0c;为广大有志之士敞开了一扇通往知识殿堂的大门。 而今&…

【FFmpeg】av_write_frame函数

目录 1.av_write_frame1.1 写入pkt&#xff08;write_packets_common&#xff09;1.1.1 检查pkt的信息&#xff08;check_packet&#xff09;1.1.2 准备输入的pkt&#xff08;prepare_input_packet&#xff09;1.1.3 检查码流&#xff08;check_bitstream&#xff09;1.1.4 写入…

【创建者模式-建造者模式】

概要 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 建造者模式包含以下角色 抽象建造者类&#xff08;Builder&#xff09;&#xff1a;这个接口规定要实现复杂对象的那些部分的创建&#xff0c;并不涉及具体的部件对象的创建。具体建…

什么是ISR?

ISR&#xff08;Interrupt Service Routine&#xff0c;中断服务程序&#xff09;是一个用于处理硬件中断的特定程序。中断是硬件或软件引起的事件&#xff0c;会暂时打断当前正在运行的任务&#xff0c;以便紧急处理某个事件。ISR的目的是快速响应中断信号&#xff0c;执行所需…

在WSL Ubuntu中启用root用户的SSH服务

在 Ubuntu 中&#xff0c;默认情况下 root 用户是禁用 SSH 登录的&#xff0c;这是为了增加系统安全性。 一、修改配置 找到 PermitRootLogin 行&#xff1a;在文件中找到 PermitRootLogin 配置项。默认情况下&#xff0c;它通常被设置为 PermitRootLogin prohibit-password 或…

一篇文章学会【node.js安装以及Vue-Cli脚手架搭建】

一.为什么搭建Vue-Cli (1).传统的前端项目结构&#xff1a; 一个项目中有许多html文件&#xff0c;每一个html文件都是相互独立的&#xff0c; 如果需要在页面中导入一些外部依赖的组件&#xff0c;就需要在每一个html文件中都需要导入&#xff0c;非常麻烦 (2).现在的前端…

A股低开高走,近3000点,行情要启动了吗?

A股低开高走&#xff0c;近3000点&#xff0c;行情要启动了吗&#xff1f; 今天的A股&#xff0c;让人瞪目结舌了&#xff0c;你们知道是为什么吗&#xff1f;盘面上出现2个重要信号&#xff0c;一起来看看&#xff1a; 1、今天两市低开高走&#xff0c;银行板块护盘指数&…

Windows 下后台启动java项目的 jar 包

java -jar swagger.jar 的dos窗口 后台启动 jar 包&#xff1a; 使用 javaw.exe 启动 jar 包&#xff0c;并不会在窗口打印日志&#xff0c;而且会直接在后台运行进程&#xff0c;关掉窗口&#xff0c;进程继续跑 javaw -jar swagger.jar 关闭进程&#xff1a; 后台启动的 …

大数据面试题之Spark(7)

Spark实现wordcount Spark Streaming怎么实现数据持久化保存? Spark SQL读取文件&#xff0c;内存不够使用&#xff0c;如何处理? Spark的lazy体现在哪里? Spark中的并行度等于什么 Spark运行时并行度的设署 Spark SQL的数据倾斜 Spark的exactly-once Spark的RDD和p…

大话C语言:第26篇 静态库

1 静态库概述 C语言静态库&#xff08;Static Library&#xff09;是一种包含一组目标文件的归档文件&#xff0c;这些目标文件通常是由多个C语言源文件编译而成的。静态库在程序编译时被链接到目标程序中&#xff0c;成为程序的一部分&#xff0c;因此在运行时不再需要额外的…

java Lambda表达式介绍

Lambda 表达式是 Java 8 中引入的一种语法糖,用于简化使用函数式接口的代码编写。它使得 Java 编程更加简洁和灵活,特别是在处理集合数据、事件监听器等方面提供了便利。 Lambda 表达式的语法 Lambda 表达式的基本语法如下: (parameters) -> expression或者是一个代码…

盘古5.0,靠什么去解最难的题?

文&#xff5c;周效敬 编&#xff5c;王一粟 当大模型的竞争开始拼落地&#xff0c;商业化在B端和C端都展开了自由生长。 在B端&#xff0c;借助云计算向千行万业扎根&#xff1b;在C端&#xff0c;通过软件App和智能终端快速迭代。 在华为&#xff0c;这家曾经以通信行业起…

Error: A JNl error has occurred, please check your installation and try again.

Eclipse 运行main方法的时候报错&#xff1a;Error: A JNl error has occurred, please check your installation and try again. 一、问题分析 导致这个问题&#xff0c;主要原因&#xff0c;我认为是在新版本中&#xff0c;默认的JDK编译版本与我们配置的JDK版本不一致导致的…

公网环境使用Potplayer远程访问家中群晖NAS搭建的WebDAV听歌看电影

文章目录 前言1 使用环境要求&#xff1a;2 配置webdav3 测试局域网使用potplayer访问webdav4 内网穿透&#xff0c;映射至公网5 使用固定地址在potplayer访问webdav 前言 本文主要介绍如何在Windows设备使用potplayer播放器远程访问本地局域网的群晖NAS中的影视资源&#xff…

告别流失,拥抱增长!Xinstall智能邀请系统,让你的App拉新更高效

在移动互联网时代&#xff0c;App的推广和运营面临着诸多挑战。其中&#xff0c;如何有效地进行邀请拉新活动&#xff0c;吸引更多新用户&#xff0c;成为了每个运营者都需要面对的问题。今天&#xff0c;我们将为大家介绍一款能够帮助你轻松解决这一难题的神器——Xinstall。 …

C语言从头学28——数组(一)

一、基本概念 数组是一组相同类型的值被顺序地储存在一起。数组表示方法为变量名加方括号&#xff0c;方括号里是数组的成员数量。例如&#xff1a; int arr[20]; //声明了一个 int 类型的名为 arr 包含20个成员的数组 数组的成员是从0开始编号的&#x…

深入理解Symfony框架的环境配置策略

引言 Symfony是一个高度灵活的PHP框架&#xff0c;它允许开发者通过配置文件来定制应用程序的行为&#xff0c;以适应不同的运行环境。环境配置是Symfony中一个重要的概念&#xff0c;它允许开发者为开发、测试和生产环境设置不同的配置参数。本文将详细探讨Symfony的环境配置…

7-491 3名同学5门课程成绩,输出最好成绩及所在的行和列(二维数组作为函数的参数)

编程:数组存储3名同学5门课程成绩 输出最好成绩及所在的行和列 要求&#xff1a;将输入、查找和打印的功能编写成函数 并将二维数组通过指针参数传递的方式由主函数传递到子函数中 输入格式: 每行输入一个同学的5门课的成绩&#xff0c;每个成绩之间空一格&#xff0c;见输入…

互联网框架五层模型详解

注&#xff1a;机翻&#xff0c;未校对。 What is the Five Layers Model? The Framework of the Internet Explained 五层模型互联网框架解释 Computer Networks are a beautiful, amazing topic. Networks involve so much knowledge from different fields, from physics…

Elasticsearch架构基本原理

Elasticsearch的架构原理可以详细分为以下几个方面进行介绍&#xff1a; 一、Elasticsearch基本概念 Elasticsearch&#xff08;简称ES&#xff09;是一个基于Lucene构建的开源、分布式、RESTful搜索和分析引擎。它支持全文搜索、结构化搜索、半结构化搜索、数据分析、地理位…