手表网站 海马300米潜水表网站建设需要会什么软件有哪些方面

news/2025/9/26 5:52:39/文章来源:
手表网站 海马300米潜水表,网站建设需要会什么软件有哪些方面,潍坊专业环保设备,wordpress文件上传位置七大排序的个人总结#xff08;二#xff09; 归并排序#xff08;Merge 归并排序#xff08;Merge Sort#xff09;: 归并排序是一个相当“稳定”的算法对于其它排序算法#xff0c;比如希尔排序#xff0c;快速排序和堆排序而言#xff0c;这些算法有所谓的最好与最…七大排序的个人总结二 归并排序Merge      归并排序Merge Sort:   归并排序是一个相当“稳定”的算法对于其它排序算法比如希尔排序快速排序和堆排序而言这些算法有所谓的最好与最坏情况。而归并排序的时间复杂度是固定的它是怎么做到的 两个有序数组的合并 首先来看归并排序要解决的第一个问题两个有序的数组怎样合成一个新的有序数组 比如数组1 3578 数组2为 14910 首先那肯定是创建一个长度为8的新数组咯然后就是分别从左到右比较两个数组中哪一个值比较小然后复制进新的数组中比如我们这个例子  3578  14910     一开始新数组是空的。 然后两个指针分别指向第一个元素进行比较显然1比3小所以把1复制进新数组中  3578 14910   1 第二个数组的指针后移再进行比较这次是3比较小 3578 14910   13 同理我们一直比较到两个数组中有某一个先到末尾为止在我们的例子中第一个数组先用完。 3578 14910   134578 最后把第二个数组中的元素复制进新数组即可。 134578910 由于前提是这个两个数组都是有序的所以这整个过程是很快的我们可以看出对于一对长度为N的数组进行合并所需要的比较次数最多为2 * N -1这里多谢园友icyjiang的提醒。   这其实就是归并排序的最主要想法和实现归并排序的做法是: 将一个数组一直对半分问题的规模就减小了再重复进行这个过程直到元素的个数为一个时一个元素就相当于是排好顺序的。 接下来就是合并的过程了合并的过程如同前面的描述。一开始合成两个元素然后合并4个8个这样进行。 所以可以看到归并排序是“分治”算法的一个经典运用。 我们可以通过代码来看看归并算法的实现 public static int[] sort(int[] array, int left, int right) {if (left right) {return new int[] { array[left] };}int mid (right left) / 2;int[] l sort(array, left, mid);int[] r sort(array, mid 1, right);return merge(l, r);}// 将两个数组合并成一个public static int[] merge(int[] l, int[] r) {int[] result new int[l.length r.length];int p 0;int lp 0;int rp 0;while (lp l.length rp r.length) {result[p] l[lp] r[rp] ? l[lp] : r[rp];}while (lp l.length) {result[p] l[lp];}while (rp r.length) {result[p] r[rp];}return result;} 代码量其实也并不多主要的工作都在合并两个数组上。从代码上看 if (left right) {return new int[] { array[left] };} 这个是递归的基准base case也就是结束的条件是当元素的个数只有一个时。 int mid (right left) / 2;int[] l sort(array, left, mid);int[] r sort(array, mid 1, right); 这一部分显然就是分divide将一个大问题分成小的问题。 最后也就是治conquer了将两个子问题的解合并可以得到较大问题的解。 所以可以说归并排序是说明递归和分治算法的经典例子。   然后就又要回到比较原始的问题了归并排序它为什么会快呢 想回答这个问题可以先想一下之前说过的提高排序速度的两个重要的途径一个是减少比较次数一个是减少交换次数。 对于归并排序而言我们来从之前的例子应该可以看到两个数组的合并过程是线性时间的也就是说我们每一次比较都可以确定出一个元素的位置。这是一个重要的性质。 我们来看一个可以用一个例子来体会一下假如有这样一个数组 37251046 冒泡和选择排序的比较次数是25次。 直接插入排序用了15次。 而归并排序的次数是相对稳定的由我们上面提到的比较次数的计算方法我们的例子要合并4对长度为1的2对长度为2的和1对长度为4的。 归并排序的最多的比较次数为4 * 1 2 * 3 7 17次。感谢icyjiang的提醒   再次说明一下这个例子依然只是为了好理解不能作为典型例子来看。 因为元素的随机性直接插入排序也可能是相当悲剧的。但我们应该从中看到的是归并排序在比较次数上的优势。 至于在种优势是怎么来的我个人不成熟的总结一下就是尽量的让上一次操作的结果为下一次操作服务。 我们每一次合并出来的数组是不是就是为下一次合并做准备的。因为两个要合并的数组是有序的我们才可能高效地进行合并。   快速排序Quick Sort 这个算法的霸气程度从它的名字就可以看出来了。快速排序的应用也是非常广的的各种类库都可以看到他的身影。这当然与它的“快”是有联系的正所谓天下武功唯快不破。 快速排序的一个特点是对数组的一次遍历可以找到一个枢纽元pivot确定位置还可以把这个数组以这个枢纽元分成两个部分左边的元素值都比枢纽元小右边的都比枢纽元大。我们递归地解决这两个子数组即可。 我们还是通过一个特殊的例子来看一下快速排序的原理 我们假设有这样一个数组 4732815 对于快速排序来说第一步就是找出一个枢纽元而对于枢纽元的寻找是对整个算法的时间性能影响很大的因为搞不好快速排序会退化成选择排序那样。 对于这个不具有代表性的例子我们选择的是第一个元素做为枢纽元。 pivot 4  4732815  其中红色为左指针蓝色为右指针。一开始我们从右边开始找到第一个比pivot小的数。停止然后将该值赋给左指针同样左指针向右移动。 也就是说我们第一次得到的的结果是这样的 1732815 同样的道理我们在左边找到一个比pivot大的值赋值给右指针同时右指针左移一步。 得到的结果应该是这样的 1732875 请注意我们的这个移动过程的前提都是左指针不能超过右指针的前提下进行的。 这两个过程交替进行其实就是在对元素进行筛选。这一次得到的结果是 1232875 黄色高亮表示两个指针重叠了这时候我们也就找到了枢纽元的位置了将我们的枢纽元的值插入。 也就是说我们接下来的工作就是以这个枢纽元为分割对左右两个数组进行同样的排序工作。 来看看具体的代码是怎么实现的 public static void sort(int[] array, int start, int end) {if (start end) {return;}int left start;int right end;int temp array[left];while (left right) {while (left right temp array[right]) {right--;}if (left right) {array[left] array[right];left;}while (left right temp array[left]) {left;}if (left right) {array[right] array[left];right--;}}array[left] temp;sort(array, start, left - 1);sort(array, left 1, end);}   接下来还是同样的问题快速排序为什么会快呢如果没有足够的强大那不是“浪得虚名”吗  首先还是看看前面的例子。 首先可以比较容易感受到的就是元素的移动效率高了。比如说例子中的1一下子就移动到了前面去。 这也是我个人的一点感受只是觉得可以这样理解比较高效的排序算法的特性 高效的排序算法对元素的移动效率都是比较高的。 它不像冒泡直接插入那样每次可能都是步进一步而是比较快速的移动到“感觉是正确”的位置。 想想希尔排序不就是这么做的吗后面的堆排序也是这个原理。   其次快速排序也符合我们前面说的“让上一个操作的结果为下一次操作服务”。 很明显在枢纽元左边的元素都比枢纽元要小右边的都比枢纽元大。显然数据的范围小了数据的移动的准确性就高了。   但是快速排序的一个隐患就是枢纽元的选择我提供的代码中是选第一个元素做枢纽元这是一种很冒险的做法。 比如我们对一个数组 98765 想通过快速排序来变成从小到大的排序。如果还是选择以第一个元素为枢纽元的话快速排序就变成选择排序了。 所以在实际应用中如果数据都是是随机数据那么选择第一个做枢纽元并没有什么不妥。因为这个本来就是看“人品”的。 但是如果是对于一些比较有规律的数据我们的“人品”可能就不会太好的。所以常见的有两种选择策略 一种是使用随机数来做选择。呵呵听天由命。 另一种是取数组中的第一个最后一个和中间一个选择数值介于最大和最小之间的。 这一种又叫做“三数中值分割法”。理论上这两种选择策略还是可能很悲剧的。但概率要小太多了。   堆排序用文字太难看懂了想画一些图来帮助理解求各位大大推荐可以比较方便画二叉树的工具。 分类: 数据结构 转载于:https://www.cnblogs.com/wangprince2017/p/7663457.html

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

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

相关文章

怎么优化一个网站关键词网络推广方案下拉管家xiala11

视频指路 参考博客笔记 参考笔记二 用来分类的模型 说明:1、 逻辑斯蒂回归和线性模型的明显区别是在线性模型的后面,添加了激活函数(非线性变换) ​ 2、分布的差异:KL散度,cross-entropy交叉熵 现在损失函数衡量不是距离而是分布…

如何设计网站制作方案wordpress 做官网

文章目录 每日一句正能量前言35岁被称为运维半衰期,究竟为何?如何顺利过渡半衰期运维的职业发展路径后记 每日一句正能量 凡事顺其自然,遇事处于泰然,得意之时淡然,失意之时坦然,艰辛曲折必然,历…

jsp asp php哪个做网站重庆高端网站建设公司

AOP 概念 AOP:全称是Aspect Oriented Programming即:面向切面编程。 简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对程序进行增强&#xff…

手机建站平台珠海网站建设珠海易推网

1、问题背景:maven使用默认settings.xml配置时,Idea基于pom.xml更新依赖时报错,有些组件下载时连接超时, 通过日志发下,去连接maven.org网站下载依赖,有时候肯定会超时。 2、解决办法:使用国外…

宁波制作企业网站成都机械设计公司

技术选型架构图 是一个用于展示项目中所采用的各种技术和组件之间关系的图表。 它通常包括以下几个部分: 1. 项目名称和描述:简要介绍项目的背景和目标。 2. 技术栈:列出项目中使用的主要技术和工具,如编程语言、框架、数据库…

湖北省建设厅造价官方网站微网站二级页面怎么做

如果你在vue3中使用reactive()方法创建响应式数据,然后又用torefs()方法将响应式数据解构成单一的ref响应式数据。 此时,如果你想用watch监听解构出来单一的响应式数据,watch不起作用。 此时,你需要用watch监听之前的reactive()…

旅游网站建设规划书模块划分硅谷网站开发薪酬

目录 摘要 Abstract 绪论 1.1 研究背景 1.2 研究目的和意义 2.1 ChatGPT技术概述 2.2 ChatGPT技术的优缺点分析 2.2.1 优点 2.2.2 缺点 摘要 本论文围绕ChatGPT展开,介绍了该技术的发展历程、特点及应用,分析了该技术的优缺点,提出了…

站长统计推荐网络推广方式有哪几种

交换机作为STelnet客户端登录其他设备配置示例1、组网需求图1 设备通过STelnet登录其他设备组网图如上图1所示,用户希望在服务器端和客户端进行安全的数据交互,配置两个登录用户为client001和client002,分别使用password认证方式和RSA认证方式…

前端外包网站大学哪个专业可以做网站

1、修改openOCD 的配置文件jlink.cfg 由于手头上的jlink 是swd接口,需要将openOCD的jlink.cfg修改,指定接口类型为swd。这里直接复制一份,然后修改,jlink-swd.cfg内容如下: adapter driver jlink transport select s…

网站应用水印图片网线制作实训总结

卸载MySQL 1.Windows卸载MySQL8 停止服务 用命令停止或者在服务中停止都可以 net stop mysql(服务名字可以去服务里面看一下)控制面板卸载MySQL 卸载MySQL8.0的程序可以和其他桌面应用程序一样直接在控制面板选择卸载程序,并在程序列表中…

购物网站后台订单处理流程网络营销策略分析

文章主旨:研究了Codex自动生成的程序中的错误,并探讨了现有的程序修复(APR)工具以及新发布的Codex-e是否能够修复自动生成的有缺陷的程序。 现在基于大语言模型,输入自然语言,生成代码的应用非常普遍。但是…

godady怎么做网站查询域名注册网站

本文包含什么? 项目运行的方式项目代码,自己实现KNN算法以及朴素贝叶斯算法.代码介绍运行有问题? csdn上后台随时售后.项目说明 本文主要是自己从0实现KNN算法以及朴素贝叶斯算法.然后使用英文垃圾邮件数据集进行垃圾邮件分类.常见的代码均调用sklearn库来实现,本文自行实现…

有没有做网站的教程网上商城推广

作者 | youzhibing链接 | cnblogs.com/youzhibing/p/9553752.html1.读源码的经历刚参加工作那会,没想过去读源码,更没想过去改框架的源码;总想着别人的框架应该是完美的、万能的,应该不需要改;另外即使我改了源码&…

福建省建设工程注册管理中心网站网络优化工程师需要具备哪些能力

大家都知道,苹果手机在更新几个大版本后,手机不是变得非常卡,就是非常的耗电,大大的缩短了手机的使用寿命。所以,许多人都不会选择更新系统,但是手机只要连上WiFi并且在充电状态,就会在半夜自动…

AI智慧:下一站•不是算法而是「深耕」

AI智慧:下一站•不是算法而是「深耕」 副标题:当算力触及天花板,价值理解的深度,将成为人机共生的新边界。 引言:从“花果山”到“价值原语” 一位诗人用七年时间,将一处地名“花果山”,淬炼为“悟空来路与关山…

北京理工大学网站网页设计揭阳做网站哪个好

文章目录 1. memcpy函数2. memmove函数3. memset函数4. memcmp函数希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力&#xff01; 内存函数是用于 操作内存块的一组函数&#xff0c;它们可以对内存进行复制、移动、设置和比较等操作。这些函数主要在 <str…

百度网站入口特效词永安市建设局网站

bash是一个命令解释器&#xff0c;其支持命令行展开&#xff5b;&#xff5d;写法 alias是命令别称&#xff0c;即为命令等同于&#xff0c;使用unalias对应命令可以取消该别称 alias可以对命令进行更改

盐城网站建设制作wordpress多域名访问

本文介绍了 g 编译器的使用方法和常见参数解释&#xff0c;帮助您编译和构建 C 程序。 引言 在 C 程序开发中&#xff0c;选择一个合适的编译器是至关重要的。g 是 GNU 编译器集合&#xff08;GCC&#xff09;中的 C 编译器&#xff0c;提供了丰富的功能和选项&#xff0c;帮…

做php网站需要什么软件开发会做网站开发 但是不会二次开发

使用U盘启动盘安装系统时需要用到U盘&#xff0c;但是当我们将U盘插上电脑&#xff0c;结果出现拒绝访问的情形&#xff0c;别说是使用U盘启动盘重装系统了&#xff0c;连U盘基础的文件存储功能都无法使用。当U盘出现拒绝访问怎么解决呢?就此问题&#xff0c;下面小编分享u盘拒…