门户网站意思网站建设规划书 简版

web/2025/10/2 22:38:38/文章来源:
门户网站意思,网站建设规划书 简版,wordpress文章评论数量,wordpress底部浮动窗口欢迎来到博主的专栏——C语言数据结构 博主ID#xff1a;代码小豪 文章目录 冒泡排序冒泡排序的代码及原理快速排序快速排序的代码和原理快速排序的其他排序方法非递归的快速排序 冒泡排序 相信冒泡排序是绝大多数计科学子接触的第一个排序算法。作为最简单、最容易理解的排序…欢迎来到博主的专栏——C语言数据结构 博主ID代码小豪 文章目录 冒泡排序冒泡排序的代码及原理快速排序快速排序的代码和原理快速排序的其他排序方法非递归的快速排序 冒泡排序 相信冒泡排序是绝大多数计科学子接触的第一个排序算法。作为最简单、最容易理解的排序算法冒泡排序虽然效率不高但是冒泡排序的思路给了其他排序算法一些启发。 冒泡排序的思路如下 1从第一个数据开始向后继元素比较大小、若满足条件大于或小于则交换数据的位置然后从后一个位置开始继续比较。 2当N-1与N进行数据比较后、完成一趟冒牌排序然后从头开始继续进行冒牌排序 3完成N-1趟排序后、冒牌排序结束。 可以发现、在第一趟冒泡排序结束后最大值7排到了最后一位而升序数组中的7也是排到最后一位。这一趟冒泡排序就确定了升序数组中的一位。 当第二趟冒泡排序开始时由于最后一位的数据已经确定了因此不再需要参与排序将end向前移动一位以此类推。 冒泡排序的代码及原理 void Swap(int* e1, int* e2)//交换函数 {int tmp *e1;*e1 *e2;*e2 tmp; } void BubbleSort(int* a, int n) {for (int i 0; i n-1; i)//共计排n-1趟{int end n - i - 1;for (int begin 0;//每趟冒泡排序从0开始begin end;//当beginend时结束begin){if (a[begin] a[begin 1])//满足条件交换数据{Swap(a[begin], a[begin 1]);}}} }冒牌排序的原理如下 每一趟冒泡排序都能使至少一个数据处于正确的升降序的位置。即每趟排序都能让当前范围的最大值位于最后一个位置好比水中的鱼吐出的泡泡从水底到水面渐渐变大。 快速排序 快速排序和冒泡排序都有一个相似之处或者是一种排序的思路即一趟排序完成单个或多个数据的定位将数据排在最终确定的位置上多次排序后将所有数据都完成定位最终完成排序操作。 冒泡排序的思路是每次确定最后一位因此每趟排序都需要将整个数组遍历一遍导致时间复杂度非常高。快速排序作为最著名昭著的排序算法以高效率深受程序员喜爱这里讲讲快排的优化之处。 先来了解一下快速排序的步骤 1选取数组中的任意一个数据作为关键数据key 2让key左边的数据小于大于key右边的数据大于小于key 3将整体分割为两部分一部分是key左边另一部分是key右边以这些部分作为一个整体重复123操作直到所以数据不可分割为止。 这个思路单凭讲述时很难理解其中奥义的。我们先拆分步骤逐渐讲解。 1选取key可以选择区间中的任意数据选取方法通常有三种取队首、取队尾、随机值取中间数通常来说结合三数取中即在队首、队尾、随机之间选择中间数作为key是最合理的。但这里为了方便讲解选择取队首作为key 2中让key左边的数据小于key右边的数据大于key有多种方法总体而言对效率影响不大我们先来了解快排发明者霍尔的方法。 首先将待排序的区间选出队首第一个值为key值。区间最左边设置一个left最右边设置一个right。如图 让right往左边遍历若遍历的数据小于key则right停留在该数据处。 当right找到比key小的数后让left向右遍历找到比key大的数。找到比key大的数后停留在该数据处。 当left和right都停留时交换left和right 交换结束后重复上述步骤让right向左遍历。 此时left继续向右遍历left与right重合此时将key与重合位置的数据交换。 以key为分割线将这段区间分为两个区间。 再对这两个区间进行快排。以此类推。 当某个区间的left和right重合数据不可再分割不再需要排序。 快速排序的代码和原理 快速排序的原理如下 和冒泡排序有个类似的点每一趟冒泡排序都有一个数据被定位快速排序也是如此key位置的左边小于key右边大于key那么key这个位置就是符合排序要求的位置的。那么快速排序比冒泡排序有效率的点在哪呢 冒泡排序每趟排序都需要将整个数组遍历一遍。快速排序使用了一种分治的方法将区间分割成多个小区间进行排序减少了需要遍历的元素个数。 此时快速排序就不再需要遍历整个数组了而是遍历小区间遍历区间1只用遍历4个数据定位一个区间2只需遍历2个数据定位1当数据数量变得很多时快速排序的优势更加明显效率更快。 代码如下 void QuickSort(int* a, int begin, int end) {int left begin;int right end-1;if (left right)//区间不可再分割结束递归{return;}int key left;//队首取keywhile (left right)//遍历条件{while (left right a[key] a[right])//right向左寻找比key小的值{right--;}while (left righta[key]a[left])//left向右寻找比key大的值{left;}Swap(a[left], a[right]);//找到之后交换}Swap(a[key], a[left]);//left与right相等与key交换。key left;QuickSort(a, begin, key);//分割QuickSort(a, key 1, end);//分割 }快速排序的其他排序方法 这里介绍另外一种排序方式——前后指针法。霍尔使用left和right的找寻方法非常巧妙但是代码较复杂。这里讲一种较为简洁的找寻方法对效率影响不大。 定义一个prev和cur指向队首与队首的后一个元素key值仍取队首。 步骤如下 1判断cur的值是否大于prev 若大于cur往前移动一位prev不变。 若小于prev往前移动一位与cur交换数据cur再往前移动一位。若prev指针与cur相遇不交换。 2当cur超出区间后让key与prev交换数据。 剩下也是将key分割两个区间继续分治只是找寻方法改变了。 为什么这种方法能完成key的左边比key小右边比key大呢? 首先我们可以发现cur与prev之间的元素都是比key大的。我们重新回顾一下步骤。 1最初开始时prev与cur之间不存在任何数据因为他们相邻。 2cur与prev最初是挨着的当cur遍历到比key大的树据才会有所距离此时距离之间的数据都是比key大到数。 3为了保持cur与key之间的数都是大于key值需要将prev后一位的数据一定大于key与小于key值的cur进行交换 4最后prev的值一定是小于key的因为此时prev的值是从小于key的cur值里交换而来的。所以prev一定小于key。 如果prev和cur中间的数据保持比key大那么当cur超出范围时key左边一定小于key右边一定大于key 代码如下 void QuickSort(int* a, int begin, int end) {if (begin end)//区间不可分割时停止递归{return;}int prev begin;int cur begin 1;int key begin;while (cur end)//cur没超出区间{if (a[cur] a[key])//当cur小于key的值时{prev;if (prev ! cur){Swap(a[prev], a[cur]);}}cur;//不管是大于key还是小于keycur最后都要}Swap(a[prev], a[key]);key prev;QuickSort(a, begin, key);QuickSort(a, key1, end); }非递归的快速排序 前面讲了快排的递归形式但是递归就说明需要大量的调用堆栈一旦递归深度过高就会导致栈溢出因此有人想出了快速排序的非递归方法。 想要替代递归的作用就得先找到为什么使用递归以及递归是为了实现什么。 快速排序中的递归起的作用是为了记录分割的区间的起始点与结束点 QuickSort(a, begin, key); QuickSort(a, key1, end);如果我们有办法将每趟快速排序的分割区间记录下来。就能取代递归的作用。 我们可以创建一个栈用来记录快速排序的区间。这样子就不再需要递归了。 记录的步骤如下 1将左区间和右区间压入栈中 2将左区间和右区间弹出。将弹出的数据作为一个区间进行一趟快速排序 3完成快速排序后将新分割好的节点压入栈中 4若取出的左右区间不构成新区间不执行这个操作。 循环往复直到栈变成空栈。 代码如下 void QuickSort(int* a, int begin, int end) {stack s1;StackInit(s1);//初始化栈StackPush(s1,begin);//压入左区间StackPush(s1,end);//压入右区间while (!StackEmpty(s1)){int right StackTopData(s1);//出栈StackPop(s1);int left StackTopData(s1);//出栈StackPop(s1);int cur left1;int prev left;int key left;while (cur right){if (a[cur] a[key]){prev;if (prev ! cur){Swap(a[cur], a[prev]);}}cur;}Swap(a[prev], a[key]);key prev;//[left,key],[key1,right]if (left key){StackPush(s1, left);//压入分割后的左区间StackPush(s1, key);//压入分割后的右区间}if (key 1 right){StackPush(s1, key 1);//压入分割后的左区间StackPush(s1, right);//压入分割后的右区间}}StackDestory(s1); }栈的实现函数 void StackInit(stack* ps)//栈的初始化 {ps-data NULL;ps-capacity 0;ps-top 0; }void StackPush(stack* ps, datatype n)//压栈 {assert(ps);if (ps-top ps-capacity){int newcapacity ps-capacity 0 ? 4 : 2 * ps-capacity;datatype* tmp (datatype*)realloc(ps-data, sizeof(stack) * newcapacity);assert(tmp);ps-data tmp;ps-capacity newcapacity;}ps-data[ps-top] n;ps-top; }void StackPop(stack* ps)//出栈 {if (StackEmpty(ps)){perror(Stack is empty\n);return;}ps-top--; }bool StackEmpty(stack* ps)//判断是否空栈 {return ps-top 0; }datatype StackTopData(stack* ps)//取栈顶 {if (StackEmpty(ps)){perror(Stack is empty\n);exit(1);}return ps-data[ps-top - 1]; }void StackDestory(stack* ps)//销毁栈 {assert(ps);free(ps-data);ps-data NULL;ps-top 0;ps-capacity 0; }

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

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

相关文章

合肥做网站的的公司有哪些商丘市今天确诊名单

三种硬币,用数学排列组合的思想,就是从3种不同的物品中选择然后再组合,当然每种物品选择的数量是变化的,所以就设定1分的数量为i,2分的数量为j,5分的数量为k.接着再想想,因为最终的结果是2角,也就是20分&am…

名城苏州网站wordpress怎么看代码

我从小在农村长大,我们村前面有一条很长的河,我家在河的后面的那个小山坡上,背靠着大山,很多大师来我们家,都说我家这里是风水宝地,幸运的是,我就在这块风水宝地里长大了。后来,我很…

做购物网站赚钱吗etherna 简洁商业企业wordpress

首先在全局css样式中增加一个 dark 模式即可,主要就是filter这个属性, invert(1);则表示100%完全反转样式,通俗点就是颠倒黑白,白的让它变成黑的,黑的让它变成白的。 css中的filter函数总结 filter:invert(1);数值范围…

什么是网站及其制作步骤wordpress静态文件放到cdn

目录 需求 范例运行环境 表及视图样本设计 数据统计实现 小结 需求 假设有一课程项目,我们需要统计该项目中的课件数量,并提取课程信息,如课程标题名称、排序号等,如果使用 GROUP BY 聚合函数,则只能统计返回课件…

建设网站找哪个公司好玩的网页传奇游戏

1 你用上5G了吗?它已经用上了▼2 戴口罩的好处又增加了▼3 原来如此...▼4 哈哈哈哈▼5 露脐装的正确打开方式(素材源于网络,侵删)▼6 火鸡面到底有多辣▼7 孩子你要完了(素材来源网络,侵删&#xff0…

东莞外贸网站建设策划方案黄山找人做网站

遥感领域的通用大模型 2023.11.13在CVPR发表 原文地址:[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) 摘要 ​ 基础模型最近引起了人们的极大关注,因为它有可能以一种自我监督的方式彻底改变视觉表征学习领域。虽然大多数基础模型…

网站后台更新没有变化软件开发培训

内存分布 C中的内存区域主要有以下5种 栈(堆栈):存放非静态局部变量/函数参数/函数返回值等等,栈是向下增长的【地址越高越先被使用】。栈区内存的开辟和销毁由系统自动执行 堆:用于程序运行时动态内存分配&#xff…

网站被攻击打不开怎么办织梦制作手机网站

没太搞懂自顶向下和自底向上的递归区别

徐州公司网站建设优秀室内设计作品

【算法日志】图论: 并查集及其简单应用 并查集概论 并查集是一种算法设计思想,通过判断两个元素是否在同一个集合里,常用来解决一些和图相关的连通性问题。 并查集主要有以下两个功能: 将两个元素添加到一个集合中。判断两个元素是否是在…

网站a记录的是做cnameWordPress找不到站点

一、闭包 在Python中,闭包是指一个函数内部定义的函数,这个内部函数可以访问并修改其外部函数的局部变量,即使外部函数已经执行完毕。闭包可以通过多层函数嵌套来实现。 闭包的三要素: 1、外部函数嵌套内部函数 2、外部函数返回内…

浙江建设厅网站首页什么是网页浏览器

Windows 8 JavaScript Metro应用程序--入门(上) 如你所知的Windows8允许你通过以下几种方式创建Metro应用程序: CC# JavaScript第一部分将侧重于主体结构和JavaScript Grid 应用程序的基础,在随后的文章中我将深度探究在Windows8中…

域名备案需要网站吗茶的网站制作

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

别人的域名解析到了我的网站上天猫注册店铺流程及费用

1 引言 特征提取和特征选择作为机器学习的重点内容,可以将原始数据转换为更能代表预测模型的潜在问题和特征的过程,可以通过挑选最相关的特征,提取特征和创造特征来实现。要想学习特征选择必然要了解什么是特征提取和特征创造,得…

抄底券网站怎么做的wordpress+判断标签

前言 本文介绍了一些关于神经网络可视化的项目,主要有CNN解释器,特征图、卷积核、类可视化的一些代码和项目,结构可视化工具,网络结构手动画图工具。 CNN解释器 这是一个中国博士发布的名叫CNN解释器的在线交互可视化工具。 主要…

吉林网站seo揭阳建设网站

一、前言 用户在浏览器访问一个网站时,会有前后端数据交互的过程,前后端数据交互也有几种的情况,一下就简单的来说明一下 二、原理 介绍前后端交互前先来了解一下浏览器的功能,浏览器通过渲染引擎和 JavaScript 引擎协同工作&am…

寻求南宁网站建设人员做图骂人的图片网站

2023年7月26日 串口传图到RAM并TFT显示 视频25note要求:接收两个字节数据合并为一个16位数据并写入ram: FIFO模型与应用场景 视频26 串口传图到RAM并TFT显示 视频25 note 存储器的使用,在开始读写或者结束读写的位置非常容易出现数据错误或…

阿里云 网站托管制作商城小程序费用

目录 常用的Nginx 正则表达式 rewrite 和 location的区别 location location 大致分三类: location 常用的匹配规则: location 优先级: rewrite rewrite跳转实现 rewrite 执行顺序如下 语法格式 flag标记说明 rewrite实际操作 基…

网站 做 app公众号如何推广宣传

来源:牛客网: 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 131072K,其他语言262144K Special Judge, 64bit IO Format: %lld文章目录题目描述题解:代码:题目描述 给一个没有重边的二…

好的公司网站制作学做吃的网站

1、右击project>Build Path>Configure Build Path(一般是在你的项目文件夹中手动创建一个lib文件夹,里面设置若干子文件夹存放不同的jar包,然后通过Configure Build Path导入) 存放:eclipse用来编译java文件、编…

用多说的网站网络平台怎么弄

文章目录 总结部署流程 Alertmanager 三大核心1. 分组告警2. 告警抑制3. 告警静默 报警过滤静默通知方案一:方案二: 抑制报警规则案例一 参考文档 自定义路由告警,分来自不同路由的告警,艾特不同的人员进行区分修改 alertmanager …