排序 - 插入排序

c++十大排序——插入排序 算法基本知识铺垫 有些人可能不知道什么是稳定排序、原地排序、时间复杂度、空间复杂度,我这里先简单解释一下: 1、稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 仍然在 b 的前面,则为稳定排序 2、非稳定排序:如果 a 原本在 b 的前面,且 a == b,排序之后 a 可能不在 b 的前面,则为非稳定排序。 3、原地排序:原地排序就是指在排序过程中不申请多余的存储空间,只利用原来存储待排数据的存储 空间进行比较和交换的数据排序。 4、非原地排序:需要利用额外的数组来辅助排 阅读详情

插入排序针对数量较小的序列特别有效,其算法思想为向有序子序列中插入元素a[i]使新的序列仍有序,最坏时间复杂度为O(n2)。

算法实现见InsertSort.cpp

void insertSort(int a[], int size)
 {
     int i, j, tmp;
     for (i = 1; i < size; i++) {
         tmp = a[i];
         for (j = i; j > 0 && tmp < a[j - 1]; j--) {
                 //元素位置向后平移1
                 a[j] = a[j - 1]; 
         }   

         a[j] = tmp;
     }   
 }
【排序】插入排序,希尔排序 以上是对插入排序和希尔排序的分析,是一种新的排序思想,其中的种种知识点也很碎很多,希望大家能够有所收获。 阅读详情

相关推荐

【插入排序】c++实现插入排序代码

插入排序的基本思想:从第二个元素开始,找到元素的正确位置并插入,直到最后一个元素,则完成排序。就像扑克牌,每拿一张扑克牌都将其插入到正确的位置,拿完所有扑克牌后其为有序状态。 程序代码如下: #include&lt;iostream&gt; using namespace std; void print(int a[], int n) { for(int j= 0; j&lt;...

yangchuang93的博客 9697

插入排序-简单插入排序和二分插入排序

插入排序: 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。 它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 基本思想 每一步都是将 待排序的一个数据,插入到一个已经有序的数据序列里面。直到所有的数据全部插入为止。 类似于打牌【斗地主】,每摸一张就按照顺序放到位置。每

Riptide 499

OSGEarth三维可视化避坑指南:如何高效加载SHP/TIF地理数据?

本文详细介绍了OSGEarth在三维地球可视化中高效加载SHP/TIF地理数据的实战策略,包括空间参考系配置、性能优化、二三维联动等关键技巧。通过具体案例和代码示例,帮助开发者解决坐标偏移、性能卡顿等常见问题,提升三维GIS开发效率。

weixin_29216957的博客 222

插入排序与折半插入排序比较

插入排序是一种原地排序算法,即它的空间复杂度为o(1),原始插入排序的最坏(即原始序列的顺序刚好和我们所希望的顺序相反)和平均时间复杂度均为o(n*n),而在最好的情况下(即原始序列已经是按照我们所希望的顺序排好的序列)为o(n)。 下面的例子展示原始插入排序的整个过程:整个序列存放在数组中,按照从小到大的顺序进行排列。 8 2 4 9 3 6.//原始序列 从第二个元素开始,每个元素依次与

mayo2012的专栏 1248

python语言下使用opencv接口cv2.VideoCapture()接口调用海康机器人工业相机

文章目录 目录 文章目录 前言 一、opencv接口介绍 二、调用海康机器人工业相机 1.使用海康机器人工业相机的前提 2.调用海康机器人工业相机进行显示 3.调用海康机器人工业相机进行存图 4.调用海康机器人工业相机存视频 5.调用海康机器人工业相机进行简单图像处理 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下.

qq_39570716的博客 1万+

从数学到机床:RTCP背后的几何变换与工业实现

本文深入解析RTCP(Rotary Tool Center Point)技术在五轴数控加工中的核心作用,通过几何变换与运动学原理实现刀尖点跟随,确保加工精度。从数学基础到工业实现,详细探讨了算法架构、机床结构适配及精度保障方法,为数控系统开发和高效加工提供关键技术支撑。

jump7的博客 258

插入排序之折半插入排序、希尔排序

1.折半插入排序: 折半插入排序实际上是对直接插入排序的优化,通过折半查找来找到要插入的位置,再搬移元素,最后插入即可。 思路分析: 定义low为有序部分的第一个位置,high为有序部分的最后一个位置,通过折半查找的方法,不断更新low和high的位置,直到 low>high,此时high+1即为我们要插入的位置。 直接插入排序是在每一次比较时,就进行数据的搬移;而折半插入排序是在找到插入...

林林酱 636

小米CyberGear微电机驱动代码(CAN总线驱动,含开源地址)

小米CyberGear微电机驱动代码(ROS下的CAN总线驱动,含开源地址)

2302_80751833的博客 4429

排序之二分插入排序

作为一个稳定的排序算法, 插入排序很重要,大多数程序员都可以很轻松的写出插入排序! 先看一下插入排序的代码: void sort_insert(int a[],int n) { int i,j; i=1; while(i<n) { int x = a[i]; j=i-1; while(j>=0 && a[j]>x) { a[j+1]=a[j];

Ben的专栏 4684

手把手教你完成YOLOv10 PySide6目标检测界面搭建,使用Qt6设计YOLOv10检测系统,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

手把手教你完成YOLOv10 PySide6目标检测界面搭建,使用Qt6设计YOLOv10检测系统,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1732

100天精通Python(可视化篇)——第109天:Pyecharts绘制各种常用地图(参数说明+代码实战)

100天精通Python(可视化篇)——第109天:Pyecharts绘制各种常用地图(参数说明+代码实战)

努力让自己发光,对的人才能迎着光而来 8万+

插入排序

​插入排序,百度百科上面有一个不错的例子是这样描述插入排序的, 插入排序的工作方式像许多人排序一手扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。拿在左手上的牌总是排序好的,原来这些牌是桌子上牌堆中顶部的牌 ...

花狗Fdog的博客 4278

Open3D 可视化(1)——简单可视化【2026最新版】

简单可视化,博客长期更新,本文最新更新时间为:2026年5月10日。

点云侠的博客 5684

插入排序和折半插入排序实现

一、实验(实训)目的 掌握插入排序的两种方法并加以实现: 二、实验(实训)原理或方法 直接插入排序:插入排序从第二个数开始,拿出第二个数进行向前插入排序,一直到最后一个数向前做插入排序。算法稳定。 折半插入排序:顺序地把待排序的序列中的各个元素按其关键字的大小,通过折半查找插入到已排序的序列的适当位置。 三、仪器设备、材料 VSCODE + gcc.exe 四、实验(实训)步骤 代码:复制或者截图(完整) void insertSort(int *L, int n) { int i, j;

汽车电子从业者,电子爱好者。 860

eCognition易康操作教程(一):如何利用eCognition易康软件进行影像分割之棋盘分割、四叉树分割、光谱差异分割

进程执行完成后,植被覆盖区域与裸地区域合并了。第三步:清除分割结果,点击“Image Objects”菜单栏,点击“Delete Level(s)”,选中“ResultLevel1”,点击”ok”删除棋盘分割结果。四叉树分割之后,有的正方形大一些,有的正方形小一些,大说明该区域的光谱特性更加均一,而小说明不太均一。Leve:选择运行算法的矢量层名称,这里选择四叉树分割算法得到的矢量层“ResultLevel2”。Image Layer weights:图层权重,这里设置为“1,1,1,1”。

蒹葭苍苍 4608

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

插入排序之二路插入排序

可以说二路插入排序是对折半插入排序的进一步改进,目的就是为了减少折半插入排序记录移动的次数, 但是二路插入排序需要借助n个记录的辅助空间,也就是说他的空间复杂度为O(n); 初始关键字序列   51     33          62           96 87 17 28 51 i=1 [51] first      final i=2

tongnianhani的博客 1302

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

简单插入排序,折半插入排序和2路插入排序 c源码

以下三种插入排序时间复杂度均为O(n^2) 简单插入排序,简单直接。假定数组有序,插入 i, 从后往前遍历找到适合位置 j,移动 j +1 ~ i -1往后一位,插入i到j中。 void insertSort(int *arr, int numsSize) { int i, j, k, v; for (i = 1; i < numsSize; i++) { for (j = ...

fuyuande的博客 328

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

插入排序、折半插入排序Java实现

插入排序: public class insert { public static void main(String[] args) { int a[] = {0,49,38,65,97,76,13,27,49}; f(a); for (int i = 1; i < a.length; i++) { System.out.print(a[i]+" "); ...

qq_39507723的博客 391

插入排序(直接插入排序,折半插入排序,2路插入排序,希尔排序)

/* 插入排序:直接插入排序,折半插入排序,2路插入排序,希尔排序 将数据由小到大排列 运行环境:VS2010 */ #include #include #include #define OK 1 #define ERROR 0 #define MAXSIZE 50 typedef struct { int value; }RedType; typedef struct { R

仰望星空 3248

插入排序及优化

插入排序是简单排序的一种,也是基于“减治法”思想的一种算法,减治法有3种变形: 减去一个常量; 减去一个常量因子; 减去的规模是可变的。 插入排序算法的时间复杂度和冒泡、选择排序算法一样也是o(n²),常见的基于插入排序算法思想的排序算法有: 直接插入排序算法; 折半插入排序算法; 希尔排序算法。(查看) 插入的方法一共有三种:

DR的专栏 3416

python插入排序_python简单的实现插入排序和二分插入排序

零:环境Python 3.6.5JetBrains PyCharm 2018.1.4 x64一:正常的插入排序插入排序如字面意思,是将数据一个一个的插入到列表里以形成有序数列插入排序的前提是被插入的序列是有序的,我们可以将空序列或者一个元素的序列视为有序序列然后每次都取一个新的元素去和有序序列里的元素进行遍历比较,当找到第一个比它大的数时,就insert到那个位置,到结尾就是插入到结尾因为是有序的...

weixin_39676021的博客 314

折半插入排序_【排序】(折半)插入排序、希尔排序

前言在数据结构和算法中,排序是非常重要的一环,并且排序也是渗透编程的方方面面。你或许在写一个sql的order by按照某组进行排序,又或者你在刷一道题时候、常常遇到贪心+自定义排序求解的思路题,或者变态的面试官让你手写快排,又或者是app的姓氏升降序列 - - -然而在实际的排序算法的实现上,方式是众多的,不同算法对不同的特征数据的效率也是不同的,并且不同算法的时间复杂度、空间复杂度也不同。对于...

weixin_39614754的博客 358

插入排序->{直接插入排序,二分插入排序,希尔插入排序}

插入排序->{直接插入排序,二分插入排序,希尔插入排序} 直接插入排序 原理:设有一组关键字{K1, K2,…, Kn};排序开始就认为 K1 是一个有序序列;让 K2 插入上述表长为 1 的有序序列,使之成为一个表长为 2 的有序序列;然后让 K3 插入上述表长为 2 的有序序列,使之成为一个表长为 3 的有序序列;依次类推,最后让 Kn 插入上述表长为 n-1 的有序序列,得一个表长为 ...

qq_36879870的博客 315

插入排序解析

插入排序是一种经典的简单排序算法,其核心思想是通过构建有序序列来逐步完成整体排序。该算法将待排序数组分为已排序和未排序两部分,每次从未排序部分取出第一个元素,在已排序部分从后向前扫描,找到相应位置并插入。这个过程类似于玩扑克牌时整理手中牌序的方式,具有直观易懂的特点。从算法特性来看,插入排序在最优情况下(输入数组已基本有序)时间复杂度可达到O(n),这使其对部分有序数据表现出良好的性能。然而在最坏情况下(完全逆序输入),时间复杂度会退化到O(n²)。不过由于其内层循环可以在找到插入位置时提前终止,实际运

2401_88413914的博客 771
上一篇: 排序-冒泡排序
下一篇: 排序 - 快速排序
codingnote
博客等级 码龄12年 3粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值