C++插入排序算法

插入排序的时间复杂度为o(n*n)。

逻辑分析:

将数组第一个元素认为是有序数组,然后比较第二个元素的关键字与第一个元素关键字的大小,有序排列。

将数组后面一个元素的关键字插入到前面的有序数组中,一直重复至排序完成。

代码分析:    

数组a[]={2,1,4,5,3,8,7,9,0,6},length=10。

i=1,j=0,a[j+1]=1<a[j] =2,故交换a[j],a[j+1],数组 a[]={1,2,4,5,3,8,7,9,0,6}。

i=1,j=-1,不做任何操作。

i=2,j=1,a[j+1]=4>a[j] =2,不做任何操作,数组不改变。

i=3,j=2,a[j+1]=5>a[j] =4,不做任何操作,数组不改变。

i=4,j=3,a[j+1]=3<a[j] =5,故交换a[j],a[j+1],数组 a[]={1,2,4,3,5,8,7,9,0,6}。

i=4,j=2,a[j+1]=3<a[j] =4,故交换a[j],a[j+1],数组 a[]={1,2,3,4,5,8,7,9,0,6}。

i=4,j=1,a[j+1]=3>a[j] =2,不做任何操作,数组不改变。

i=5,j=4,a[j+1]=8>a[j] =5,不做任何操作,数组不改变。

i=6,j=5,a[j+1]=7<a[j] =7,故交换a[j],a[j+1],数组 a[]={1,2,3,4,5,7,8,9,0,6}。

i=6,j=4,a[j+1]=7>a[j] =5,不做任何操作,数组不改变。

i=7,j=6,a[j+1]=9>a[j] =8,不做任何操作,数组不改变。

i=8,j=7,a[j+1]=0<a[j] =9,故交换a[j],a[j+1],数组 a[]={1,2,3,4,5,7,8,0,9,6}。

j--,直到数组 a[]={0,1,2,3,4,5,7,8,9,6}。

i=9,j=8,a[j+1]=6<a[j] =9,故交换a[j],a[j+1],数组 a[]={0,1,2,3,4,5,7,8,6,9}。

j--,直到数组 a[]={0,1,2,3,4,5,6,7,8,9}。

#include<iostream>
#include<cstdlib>using namespace std;//交换数组元素位置位置
void swap(int &a, int &b)
{int temp = a;a = b;b = temp;
}/*
插入排序。注意,若后面一个元素比其前面一个元素小,则将这两个元素交换位置,然后再来比较这个插入元素与前面一个元素的大小,若小,则还需要交换这两个元素位置,一直到这个插入元素在正确的位置为止
*/
void insertSort(int a[],  int length)
{for (int i = 1; i < length; i++){for (int j = i - 1; j >= 0 && a[j + 1] < a[j]; j--){swap(a[j], a[j + 1]);}}}int main()
{int a[] = { 2,1,4,5,3,8,7,9,0,6 };insertSort(a, 10);for (int i = 0; i < 10; i++){cout << a[i] << "";}cout << endl;system("pause");return 0;}

 

 

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

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

相关文章

身边的设计模式(一):单例 与 RedisCacheManager

大家好&#xff0c;以后我会用23篇文章&#xff0c;来给大家讲解设计模式&#xff0c;当然如果你看过我的项目&#xff0c;很多设计模式已经很会了&#xff0c;只是没有注意到&#xff0c;我这里会讲解一下&#xff0c;大家就会发现&#xff0c;如果你看懂了我的项目&#xff0…

插入排序 希尔排序 C++

最优时间复杂度为o(n)&#xff0c;又称缩小增量排序。 逻辑分析&#xff1a; 1、希尔排序首先是确定增量&#xff0c;默认的希尔增量&#xff08;不一定是最优&#xff09;为length/2。 2、根据增量分组&#xff0c;将分组的元素利用直接插入法排序。 3、增量增量/2&#x…

Kubernetes包管理器Helm发布3.0版本

Helm 3.0 已经发布&#xff0c;该版本是 CLI 工具的最新主要版本&#xff0c;主要关注简单性、安全性和可用性&#xff0c;内容如下&#xff1a;新特性移除 Tiller&#xff08;Helm 2 是一种 Client-Server 结构&#xff0c;客户端称为 Helm&#xff0c;服务器称为 Ti…

冒泡排序法 C++

实在是想感叹一下&#xff0c;因为一个很简单的东西&#xff0c;自己在网上找了半天反而弄的很复杂&#xff0c;逻辑性太强&#xff0c;小白实在是看不懂。因此&#xff0c;下面是一个最小白的冒泡排序的实现方式。 时间复杂度o(n*n)。 逻辑分析&#xff1a; 依次比较数组中…

“兼职”运维的常用命令

自从产品转到了 dotNET Core 之后&#xff0c;更深入的接触 Linux和 Docker &#xff0c;而我每天的工作中&#xff0c;有一部分时间相当于在“兼职”做一些运维的事情。下面是一些在日常中常用的命令&#xff0c;算是个备忘吧。环境操作系统&#xff1a;CentOS7Docker&#xf…

选择排序 C++

选择排序的时间复杂度为o(n*n)&#xff0c;空间复杂度为o(n)。 逻辑分析&#xff1a; 1 假设数组中的最小数为a[0]&#xff0c;然后比较数组中其他数与a[0]的大小&#xff0c;若a[i]<a[0]&#xff0c;则交换两者为止&#xff0c;如此循环下来&#xff0c;最小的数字就存在…

rabbitmq死信队列详解与使用

先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理解&#xff0c;一般来说&#xff0c;producer将消息投递到broker或者直接到queue里了&#xff0c;consumer从queue取出消息进行消费&#xff0c;但某些时…

归并排序算法 C++

感谢博客https://blog.csdn.net/a130737/article/details/38228369 归并排序的时间复杂度为o(nlgn)&#xff0c;空间复杂度为o(n)。是一种采用分治思想的排序方法。 逻辑分析&#xff1a; 假设输入数组a[] { 2, 1, 4, 5, 3, 8, 7, 9, 0, 6 }。 首先将数组二分成两个数组le…

使用ASP.NET Core 3.x 构建 RESTful API - 3.2 开始建立Controller和Action

Demo下面我们就来实践一下。打开之前的项目&#xff0c;并建立CompaniesController&#xff1a; 这里有6个地方比较关键&#xff0c;我们挨个看一下&#xff1a; RESTful API 或者其它Web API的Controller都应该继承于 ControllerBase 这个类&#xff08;点此查看详细的官方文档…

C++ 链表

线性表&#xff08;顺序表&#xff09;有两种存储方式&#xff1a;链式存储和顺式存储&#xff0c;顺式存储如数组&#xff0c;其内存连续分配&#xff0c;且是静态分配。链式存储&#xff0c;内存是不连续的&#xff0c;且是动态分配。前一个元素存储数据&#xff0c;后一个元…

波拉契尔数列 C++

题目&#xff1a;写一个函数&#xff0c;输入n, 求斐波那契数列的第n项。 分析&#xff1a;该题有两种实现方式递归或循环。当n比较大的时候f(n)结果也会比较大&#xff0c;故定义的时候可以采用long(int 也行)。递归会有大量的重复计算&#xff0c;而循环可以把f(n-1)和f(n-2)…

Deepin 下 使用 Rider 开发 .NET Core

国产的 Deepin 不错&#xff0c;安利一下。Deepin 用了也有一两年&#xff0c;也只是玩玩&#xff0c;没用在开发上面。后来 Win10 不太清真了&#xff0c;就想着能不能到 Deepin下撸码。要搞开发&#xff0c;首先少不了 IDE&#xff0c;VS2019 用不来&#xff0c;Vs Code 太复…

求旋转数组的最小数字C++

发现还是数组这种最简单的编码才适合我&#xff0c;遇到树&#xff0c;链表这些真的是一头雾水&#xff0c;自己也不知道怎么实现。言归正传&#xff0c;该篇文章介绍如何求旋转数组的最小值&#xff0c;求最大值可以适当改编即可。 什么是旋转数组呢&#xff0c;就是将一个数…

[视频演示].NET Core开发的iNeuOS物联网平台,实现从设备PLC、云平台、移动APP数据链路闭环...

此次我们团队人员对iNeuOS进行了全面升级&#xff0c;主要升级内容包括&#xff1a;&#xff08;1&#xff09; 设备容器增加设备驱动&#xff0c;包括&#xff1a;西门子&#xff08;S7-200smart、S7-300、S7-400、S7-1200、S7-1500&#xff09;、三菱&#xff08;FxSerial…

707 设计单链表

第一次完成这样的设计&#xff0c;一路磕磕碰碰&#xff0c;遇到了许多问题&#xff0c;最后终于一一解决了。感恩https://blog.csdn.net/lym940928/article/details/81276658 题目如下&#xff1a; 设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两…

选择开源项目什么最重要?

开发人员在决定是否使用某个开源项目时考虑到的最重要事项是什么&#xff1f;代码质量&#xff1f;安全性&#xff1f;好的文档&#xff1f;上述因素都很重要&#xff0c;但根据 Tidelift 和 The New Stack 的联合调查&#xff0c;控制着开源项目的开源许可证才是最需要考量的因…

leetcode 二进制求和 addBinary

题目描述&#xff1a; 给定两个二进制字符串&#xff0c;返回他们的和&#xff08;用二进制表示&#xff09;。 输入为非空字符串且只包含数字 1 和 0。 示例 1: 输入: a "11", b "1" 输出: "100" 示例 2: 输入: a "1010", b…

居然不知道和的区别?

前言那年刚找工作那会&#xff0c;就碰到过这么一个简单的题目“&和&&的区别” 那时知识面窄&#xff0c;大概也就知道1.都是作为逻辑与的运算符。2.&&具有短路功能&#xff0c;计算出前者false&#xff0c;就不需计算后者的true or false。后来在微信群里…

两数之和,输入有序数组 leetcode C++

给定一个已按照升序排列 的有序数组&#xff0c;找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2&#xff0c;其中 index1 必须小于 index2。 说明: 返回的下标值&#xff08;index1 和 index2&#xff09;不是从零开始的。你可以假设每…