归并排序的个人学习记录

C语言 数据结构 实验六 【自用】 C语言 数据结构 实验六 8638 - 直接插入排序 #include <stdio.h> #include <stdlib.h> #include <malloc.h> void TraverseArray(int *ary, int n) { int i; for(i = 0; i < n; i++) printf... 阅读详情
《原创博文,欢迎转载,欢迎交流学习》
归并排序真的挺令人痛苦的,也许是本人天资驽钝,在阅读了大量的解释,说明才有一点点的理解,在这里抛砖引玉,希望大家多多指点,也给刚接触此算法的初学者一点点的启发,如能对你有所帮助,对我则是莫大的鼓励。
好了,让我们回归正题:
1,什么是归并排序?
这个问题的答案,百度会告诉我们。归并排序,“归”可以理解为递归,但难点是“并“。
”并“即是‘合并’之意。连起来解释就是,”递分解,归合并“,意思是,在函数往下传递的时候,数组分解,在函数回归之时按顺序合并。
2.算法复杂度
简单点来理解下,是O=nlog2N,是比较优秀的排序算法,相对与冒泡、插入等n2的来说,要快很多倍,
举个例子,数据为10000个,没错是一万个,比较少的数据,
归并排序的次数为10000*log2 10000=132877,13万次多
再看下冒泡:
10000*10000=1亿次
这就是算法的魅力。
3,代码:
此处我使用C语言编写两种归并排序的算法:
第一种是大家非常常见的算法;
 C Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include 
#include 

void merge(int *a,int left,int right,int *temp){
    
int l=left;             //左边数组索引变量
    int mid=(left+right)/2;   //数组中间值
    int r=mid+1;            //右边数组索引变量
    int i=0;                //temp[i],为插入temp的位置
    while(l<=mid && r<=right){  //初始循环条件,不确定左右哪个数组先完全进入temp
        if(a[l]<=a[r]){         //此处为升序,若为降序,修改符号即可
            temp[i++]=a[l++];//当左边的值小时,把左边值插入到temp[i]中,并且i和l自增1
        }else{
            temp[i++]=a[r++];
//当右边的值小时,把右边的值插入到temp[i]中,并且i和r自增1
        }
    }
    
//运行至此,可以知道 l<=mid 和 r<=right 肯定有一个不符合了
      //  但我们不能确定是哪一个,所以我们采用一种“宁教我负天下人,休教天下人负我”的策略
        //也可以理解为‘宁可错杀一千,不可放过一个’

    
while(l<=mid){  //此处时:万一左边数据没排完,还剩下一些呢
        temp[i++]=a[l++];
    }
    
while(r<=right){  //此处时:万一右边还剩下一些宝贝呢,把他放进temp【】中吧
        temp[i++]=a[r++];
    }
    
//到这里,我们可以确定,数据已经完全进入temp了,但是我们要把数据移到a中
    for(l=0;l//为甚要用i作为结束标志? 因为只有i可以确定我们到底给temp装了多少个数据,只有i才知道temp到底经历了些什么
        a[left+l]=temp[l];//此处意思为 数组a 从left 开始接受数据,直到temp的尽头
    }

}
void merge_sort(int *a,int left,int right,int *temp){
    
if(left
        
//****************递分解******
        int mid=(left+right)/2;//找到中间值
        merge_sort(a,left,mid,temp); //将左半边数组排好
        merge_sort(a,mid+1,right,temp);//将右边数组排好

        
//**************归合并**********
        merge(a,left,right,temp);//将两个排好序的数组合并
    }

}
void sort(int *a,int n){
    
int *temp=(int*)malloc(sizeof(int)*n);//用来存储合并的数组
    merge_sort(a,0,n-1,temp);
}

int main()
{

    
int n,*a,i;               //n 为读入一个数组长度,a为动态数组,i为循环数
    scanf("%d",&n);         //读取一个数字,作为数组长度
    a=(int*)malloc(sizeof(int)*n);//申请n个 int 空间
    for(i=0;i
        a[i]=(
int)(rand()%100);//给数组a 进行随机赋值[0,99]之间的整数
    }

    
//*排序吧,少年!
    sort(a,n);

    
//*输出吧,少年!
    for(i=0;i
        printf(
"%d\t",a[i]);
    }
    
//*是不是很厉害,少年!
    return 0;
}
 C Code 
第二种是比较拗口的,希望大家仔细写一遍
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include 
#include 
void merge_sort(int *a,int left,int right,int *temp){
    
if(left
        
//****************递分解
        merge_sort(a,left,mid,temp); //将左半边数组排好
        merge_sort(a,mid+1,right,temp);//将右边数组排好

        
//**************归合并
        int l=left;         //这里就不解释了
        int r=mid+1;
        
int i=left;
        
while(l<=mid || r<=right){  //这里用的是 或 ,意思是 左边和右边都必须出界才结束,就是说左右两边的数据必须全部进入
            if(l<=mid &&(r>right || a[l]//这个判断条件是最拗口的一个了;
                                                //这样理解:如果我们想把左边的数据放入temp 需要满足怎样的条件
                                                //显然:1.必须没有越界即 l<=mid
                                                //      2.要么右边越界(即右边数据全部进入temp,而左边还有剩余)即 r>right,要么左边的数据小于右边 a[l]
                temp[i++]=a[l++];

            }
else{
                temp[i++]=a[r++];
            }
        }
        
for(l=left;l
            a[l]=temp[l];
        }
    }
}
void sort(int *a,int n){
    
int *temp=(int*)malloc(sizeof(int)*n);//用来存储合并的数组
    merge_sort(a,0,n-1,temp);
}

int main()
{

    
int n,*a,i;               //n 为读入一个数组长度,a为动态数组,i为循环数
    scanf("%d",&n);         //读取一个数字,作为数组长度
    a=(int*)malloc(sizeof(int)*n);//申请n个 int 空间
    for(i=0;i
        a[i]=(
int)(rand()%100);//给数组a 进行随机赋值[0,99]之间的整数
    }

    
//*排序吧,少年!
    sort(a,n);

    
//*输出吧,少年!
    for(i=0;i
        printf(
"%d\t",a[i]);
    }
    
//*是不是很厉害,少年!
    return 0;
}
排序算法学习之归并排序(2-路归并排序) 归并排序 基本思路: 假设初始序列有n个记录,则可看成是n个有序的子序列,每个序列长度为1,然后两两归并,得到个长度为2或者是1的有序子序列;再两两归并,,,,如此重复,直到得到一个长度为n的有序序列为止,这种排序方法称为2-路归并排序。 详细动态图解(详细图解)-------号外:归并排序发明者竟然是约翰-冯诺伊曼 归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列... 阅读详情

相关推荐

C语言试题176之实现归并排序算法

题目:实现归并排序算法概念及其介绍 归并排序(Merge sort)是建立在归并操作上的一种有效、稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。适用说明 当有 n 个记录时,需进行 logn 轮归并排序,每一轮归并,其比较次数不超过 n,元素移动次数都是 n,因此,归并排序的时间复杂度为 O(nlogn)。归并排序时需要和待排序记

码莎拉蒂 2800

《算法导论》学习心得(三)—— 归并排序(Java)

源码下载。看书看到第二部分了——排序,排序的算法主要有插入排序,归并排序,冒泡排序,堆排序,快速排序,计数排序,基数排序和桶排序,本文就先讲插入排序,归并排序和冒泡排序。 冒泡排序——它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。一种非常简单的排序算法,代码如下:

学习之旅 827

Bybit面经

这段总结描述了求职者在Bybit面试过程中的经历和相关问题,包括面试内容、求职者向面试官提问的问题以及关于Bybit的信息

郑泽洲的博客 2580

归并排序学习小结

基本2-路归并排序: 将序列两两分组,将序列归并成[n/2]个组,组内单独排序 然后将这些组再两两归并 生成[n/4]个组,组内再单独排序 以此类推 直到只剩下一个组为止 归并排序的时间复杂度为O(nlogn) 2-路归并排序的核心在于如何将两个有序序列合并成一个有序序列 具体实现有两种方法: 1、递归实现 const int maxn=100; void merge(int...

ZMST的博客 473

第零章 序 Chisel教程汇总

笔者目前西安交通大学微电子硕士在读,研究方向为数字集成电路设计与体系结构。鉴于目前RISC-V的火热程度,笔者参与了课题组的RISC-V项目,并了解、学习了颇受关注的新型硬件构建语言——Chisel,当前参与的神经网络加速器设计便是使用Chisel开发的。这是一门敏捷开发语言,据称要比传统的Verilog语言快很多。在亲身使用过后,笔者发现确实快了不少。这主要得益于Scala作为高级语言的简洁风格...

qq_34291505的博客 7万+

Class AB OPA STB仿真相位异常:从corner case到碰撞电离的排查与规避

本文深入分析了Class AB运算放大器(OPA)在STB稳定性仿真中,特定工艺角(corner case)下出现相位从0°开始的异常现象。排查发现,其根本原因在于高Vds引发的碰撞电离效应,通过衬底和电源网络引入了隐藏的正反馈通路。文章对比了修改衬底连接与优化电路降低Vds两种解决方案,并基于工程实践推荐了代价更小、兼容性更好的电路优化方案,成功规避了问题并完成流片验证。

grape的博客 636

归并排序学习

原理: 以顺序排序为例归并排序:把长度为n的数组细分成n个数组段,然后按数组排列顺序对这n个数组进行合并排序,在n/2次操作后得到n个由2个数值组成组成的数组段,再对其进行合并排序,依次操作,直到被合并成1条长为n的线段就排序完毕了。代码如下://归并排序 #include "stdafx.h" #include &lt;iostream&gt; #include &lt;algorithm&gt...

z494232191的博客 121

【FastDDS】Discovery ( 01-overview )

Fast DDS 提供了多种发现机制用于自动匹配数据写入器和读取器,包括简单发现(默认兼容RTPS标准)、静态发现(可跳过SEDP阶段)、集中式的发现服务器架构以及手动RTPS发现。发现过程分为参与者发现(PDP)和端点发现(EDP)两个阶段,PDP通过多播/单播公告确认参与者存在,EDP则匹配主题和数据类型相同的端点。系统支持配置发现协议、租约期限等通用参数,以及各机制特有设置如静态EDP XML配置、服务器定位器等。此外还支持通过监听器实现发现回调功能。

Ray Home 721

算法学习 归并排序

工作原理: 分而治之的思想,先对小块的进行排序,再进行大规模的排序,由于小规模的有序,所以在归并时按顺序遍历即可 归并排序的速度稳定在NlogN,因为不管序列如何,都要执行相同的操作。 但是所需要的空间要很多,所以在大规模数据排序,内存却不够的情况下不适合。 时间复杂度:NlogN 递归算法的空间复杂度,只需要创建一个和原来数组一样长的数组,所以为O(N) 非递归算法的空间复杂度,只需...

jiye111的博客 210

【GameFramework框架内置模块】1、全局配置(Config)

这是GameFramework框架内置模块的第一篇,全局配置Config,讲解这些模块的时候会尽量的涉及介绍、为什么使用、如何使用、代码分析这几块,让大家可以知其然,也知其所以然。全局配置表,存储了一些游戏中使用的全局的参数配置,比如玩家的初始速度、游戏初始音量等。全局配置表的结构跟DataTable结构类似,也是列行+键值对,只是没有ID这一列,因为全局配置也不需要用ID去查询, 是直接使用key值进行查询。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 5886

2025年“区块链技术”职业院校技能大赛赛后复盘与总结(必看)

记录一次2025年“区块链技术”职业院校技能大赛的参加经验总结与赛后复盘

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 1992

个人学习记录:归并排序模板

项目场景: 提示:这里简述项目相关背景: 例如:项目场景:示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大) 问题描述 提示:这里描述项目中遇到的问题: 例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据 APP 中接收数据代码: @Override public void run() { bytes = mmInStream.read(buffer); mHandler.obtainMessage(READ_DATA, b

weixin_58428691的博客 171

Android16 rk3576添加触摸点数上限到40个点

本文介绍了在Android 16系统上实现40点触摸支持的修改方案。相比Android 15,Android 16对API添加有更严格的要求,需要在MotionEvent.java中添加@FlaggedApi批注。主要修改包括:1)在input_framework.aconfig中定义flag;2)在MotionEvent.java中添加40个AXIS_GENERIC轴常量并添加批注;3)将32位指针ID处理改为64位适配;4)更新相关API文档。修改涉及多个核心文件,包括PointerController

tzj1058756809的博客 382

数据结构学习过程中易混乱的问题

本文持续记录个人在数据结构学习个人认为容易产生混乱的知识点。 ①关于希尔排序的时间复杂度②关于分治和递归的关系。③关于归并排序是内排序还是外排序?④关于快排为什么是目前被认为最优的排序方法。⑤什么是单逻辑关键字?

24考研人晴落的博客 454

088、多摄像头跨镜目标追踪 ID 频繁切换?ReID 特征 + 轨迹关联 + 时间约束方案

文章摘要:本文针对多摄像头跨镜目标追踪中ID频繁切换的问题,提出了一种结合ReID特征、轨迹关联和时间约束的综合解决方案。作者分析了ID切换的三个主要原因:ReID特征不稳定、轨迹关联依赖最近邻匹配以及忽略时间约束。通过改进ReID特征提取(多层特征融合)、引入轨迹预测(卡尔曼滤波)和添加时间窗口约束,成功将ID切换率从35%降至3%以下。文章详细分享了实现细节和踩坑经验,为跨摄像头目标追踪提供了实用优化思路。

ai技术增长的博客 169

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

归并排序(C语言)详解

记录学习第五天 今天记录一下归并排序,因为在csdn里面没有找到特别清楚的解析,所以想自己写的认真一点,也查阅了一些资料,通过这篇博客记录一下; 归并排序,光看字面,归并,似乎是把两个合并到一起,也是由此我们也就先来说一下归并排序的基本原理。 如果有两个已经排序好的数组 {1,4,6,8},{2,7,9,12}; 我们要把这两个数组合并再排序; 目标数组应该是{1,2,4,6,7,8,9,12}...

weixin_46726346的博客 4万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【初阶算法4】——归并排序的详解,及其归并排序的扩展

在之前的学习中,我们可能或多或少的接触过排序算法,也知道一些排序算法:冒泡排序选择排序插入排序等。不过这些排序有共同点——时间复杂度为O(N * N),时间上不是那么有效,我们需要进行进一步的优化,从而就有了我们这一篇博客讲述的归并排序,其时间复杂度为:O(N * logN)空间复杂度为:O(N)。小编觉得在数组对问题可能使用归并排序,尤其是一个数组对中满足一定条件,左边的左边小于右边的坐标时,可以考虑考虑归并排序算法的思想。

加油,考上985的研究生 2184

深度学习工具包 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")

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

归并排序:学习记录

归并排序 要点: 基于分治的思想,将需要比较的数组分为左右两部分。 自顶向下进行分组,知道lo >= hi时,开始递归出栈。 将出栈后的数组依次进行递归,借助一个辅助数组aux对数组结果临时储存 归并操作 从开头和中间两个位置向左遍历 当左半部分已经到头,只须将右半部分辅助数组的数据赋值给原数组的对应位置 右半部分到头同理 当左半部分的值大于右半部分,则用右半部分的值进行赋值;右半部分同理 这样保证归并后的数组,左半部分始终是较小值;而右半部分始终是较大值 代码实现 // 根据实际的数组安排

Dennis学习小站 211

归并排序算法学习记录

归并排序算法学习记录

2401_87023016的博客 387

【数据结构学习记录28】——归并排序

一.原理 我们常见的归并排序,又叫做2路归并排序,相当于是将两个顺序表或链表合在一起的操作。如果我们通过二分法来实现,将个长的顺序表一直二分法一直分到最小的子序列,然后从最小子序列逐步合并成大的表,那么最后这个大表就是有序的了。 所以这是一个递归的过程,时间复杂度为nlog2nnlog_2nnlog2​n 二.过程 因为是个递归的过程,所以一起展示比较方便 假设一个有序表的元素是0~n共n+1个元素,其中开始表示l,结束表示h,中间元素表示为m=(l+h)/2 递归表达式可以写为: sort(l,h)={

康娜喵的原创博客 342

归并排序的理解记录

记录一下归并排序的学习心得 使用了分治算法,分而治之,fft就是一个典型的例子。   把大问题分解成小问题,不但使得问题简化,而且效率也高出了很多,   归并排序采用分裂组合的方式,没分裂组合一次,小问题的解即可得出,下一次在此基础上在分裂组合。   举个例子吧,假设从大到小排序 对 1 4 3 2进行排序, 首先分裂它,变成小问题

wejoncy的专栏 594

算法学习记录07——归并排序的实现与优化

力扣(LeetCode)【912】排序数组.给你一个整数数组 nums,请你将该数组升序排列。

m0_57268389的博客 553

算法学习记录-排序——归并排序

归并排序   利用了完全二叉树的堆排序在效率上提高了不少。但是堆排序主要耗费时间在调整堆上,算法效率也不够稳定。 对于二叉树的应用,还有没有其他方法能够保持算法的效率,也能够使其是一个稳定的算法。(堆排序不够稳定) 具体效率可以查看《算法导论》、《数据结构与算法》(严蔚敏)   想想二叉树的结构,如果我们比较两个数,我们想想将两个树作为叶子,比较结果存放在根中。 如果...

aax86990的博客 177

归并排序简介

最近在做题的时候接触到求逆序数的这一类题目,比如 51Nod-2134 逆序对个数1000,我参考了网上的一些题解,发现大家普遍用归并排序来解决这一类问题,于是我想要学习一下归并排序的具体实现。我从《算法学习与应用从入门到精通》 1 中摘录了归并排序这一部分的内容,形成了这篇笔记。

Curren的博客 957

算法学习记录2 归并排序

自己的理解 归并排序感觉比快速排序简单一点...反正我觉得好理解一点.. 1.把1个要排序的数组拆分成2个要排序的小数组(可以直接取中间元素,分成2个一样长度的小数组). 2.对每个小数组继续拆分,拆分到只有一个元素. 3.把2个小数组重合归并成一个排好序的大数组,然后这个大数组再和其他大数组归并成一个更大的数组....循环下去最后归并成一开始完整的数组. 实现 ...

ajunkui4460的博客 94
下一篇: 算法-000-前言
北岛冰凌
博客等级 码龄14年 0粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值