当前位置: 首页 > news >正文

一键抓取的网站怎么做seo的中文含义是

一键抓取的网站怎么做,seo的中文含义是,学校网站建设情况介绍,流量型网站 cms快速排序(下) 前言 在上一篇文章中我们了解了快速排序算法,但那是Hoare的版本,其实还有别的版本:一种是挖坑法,它们的区别主要在于如何找基准值。霍尔的版本思路难理解但代码好理解,挖坑法则是…

快速排序(下)

在这里插入图片描述

前言

在上一篇文章中我们了解了快速排序算法,但那是Hoare的版本,其实还有别的版本:一种是挖坑法,它们的区别主要在于如何找基准值。霍尔的版本思路难理解但代码好理解,挖坑法则是思路好理解但代码不好理解;还有一种是lomuto的前后指针法
此外,还有不使用递归的快排方法(找基准值还是用的三种方法之一)。

本文就来讲解这几种不同的快排方法。

正文

挖坑法

实现思路

创建左右指针。首先从右向左找出比基准值小的数据,找到后立即放入左边坑中,当前位置变为新的“坑”,然后从左向右找出比基准值大的数据,找到后立即放入右边坑中,当前位置变为新的“坑”,结束循环后将最开始存储的分界值放入当前的“坑”中,返回当前“坑”的下标(即分界值下标)。

画图理解一下什么是“坑”。

这就是整个“挖坑”然后“填坑”直到left和right重叠时将基准值放到该位置(它该待的位置)的过程。

现在我们可以来写一下挖坑法的代码:

//挖坑法
int _QuickSort(int* arr, int left, int right)
{int hole = left;int key = arr[hole];while (left < right)//注意和霍尔版区别{//这里同样需要限制且不能是arr[right] >= key,否则可能无法“二分”,最终效率低下while (left < right && arr[right] > key){--right;}arr[hole] = arr[right];hole = right;while (left < right && arr[left] < key){++left;}arr[hole] = arr[left];hole = left;}arr[hole] = key;return hole;
}
排序效果

我们在main函数中写这样的代码:

	int a[] = { 5, 3, 9, 6, 2, 4, 7, 1, 8 };int n = sizeof(a) / sizeof(int);printf("排序前: ");PrintArr(a, n);//代码不具体展示QuickSort(a, 0, n-1);printf("排序后: ");PrintArr(a, n);

执行结果:

可以看到我们就成功排序了。


lomuto前后指针法

实现思路

创建前后指针,从左往右找比基准值小的进行交换,使得小的都排在基准值的左边。

其实前后指针对于很多学过数据结构的人来说应该已经不陌生了,但是快排也能用到前后指针法,我们看看具体怎么做

  • 定义两个变量prev和cur,让cur指向位置的数据和key值比较
    1. 若arr[cur]<arr[key],prev向后走一步并和cur交换
    2. 若arr[cur]>=arr[key],cur继续往后
  • 退出循环后将prev与key值交换,找到基准值

同样不变的思路也是要找基准值,也就是要让基准值左侧的数据都小于基准值,让基准值右侧的数据都大于基准值。

那么两个变量的作用是什么?可以说prev是用来占坑的,而cur用来找小,找到小后就让prev加一后和cur交换。退出循环后将prev与key值交换,就找到了基准值。

代码:

//lomuto前后指针法
int _QuickSort(int* arr, int left, int right)
{int prev = left, cur = left + 1;int key = left;while (cur<=right){if (arr[cur] < arr[key] && ++prev !=cur)//prev和cur相同就不交换//写为arr[cur] <= arr[key],加上等号也是殊途同归{Swap(&arr[cur], &arr[prev]);}cur++;//进不进循环cur都要往后走}Swap(&arr[key], &arr[prev]);return prev;
}

执行效果:

也一样成功排序完了。

可以发现这一种方法比起前面的Hoare版本和挖坑法,在取不取等号的探讨上少了很多麻烦。

  • 注意:

    在循环内的if语句中arr[cur] < arr[key]如果写为arr[cur] <= arr[key],并不能解决无法”二分“子序列的问题,所以加不加都无所谓。

    这也就是前后指针法的一个**缺陷:如果数组中数据都相等**,效率就会很低。


快排的非递归版本

所以现在已经知道了三种版本的快排,其实也就是三种找基准值的方法。

既然我们的快排使用的是递归,就难免有空间上的缺陷。其实快排还有非递归版本。但是要借助数据结构:栈

那么现在问题是左右区间再分左右区间时我们怎么找区间呢?因为找基准值时没有使用递归而是在找区间时使用的递归(所以找基准值使用前面说的三种方法的任意一种都行)。

(先将5和0入栈,然后出栈,left=0,right=5,找到基准值为3)

我们知道keyi(基准值)也就能区分左区间和右区间,这两个区间任意哪一个入栈都行。

现在,我们还是一样要现将right入栈再将left入栈(先入右区间),然后再入另一个区间。

此时栈不为空,我们出栈,先出的两个就是左区间,然后去找它的基准值。

然后这样找下去直到right小于left或等于left时,也就是没有数据或者只有一个数据时,构不成有效区间,就不入栈

左区间所有基准值找完后,就像二叉树一样,开始走右区间。

开始走右区间时也就是刚好栈里剩的两个数据为右区间时。

所以可以看出,我们取栈顶元素就是在模拟递归。

代码参考

现在我们通过代码来看看怎么使用栈进行快排。

//非递归版快排
//借助数据结构——栈
void QuickSortNonR(int* arr, int left, int right)
{ST st;STInit(&st);StackPush(&st, right);StackPush(&st, left);while (!StackEmpty(&st)){//取两次栈顶int begin = StackTop(&st);StackPop(&st);int end = StackTop(&st);StackPop(&st);//找基准值——用双指针法int prev = begin;int cur = begin + 1;int keyi = begin;while (cur <= end){if (arr[cur] <= arr[keyi] && ++prev!=cur){Swap(&arr[cur], &arr[prev]); }cur++;}Swap(&arr[keyi], &arr[prev]);keyi = prev;//根据基准值划分左右区间//左区间:[begin,keyi-1]//右区间:[keyi+1,end]if (keyi + 1 < end)//控制区间有效{StackPush(&st, end);StackPush(&st, keyi + 1);}	if (keyi-1>begin)//控制区间有效{StackPush(&st, keyi - 1);StackPush(&st, begin);}}STDestroy(&st);
}

那么到此本文就结束了,祝学习愉快=_=


文章转载自:
http://annaba.sxnf.com.cn
http://alchemist.sxnf.com.cn
http://backstab.sxnf.com.cn
http://chromonema.sxnf.com.cn
http://anionic.sxnf.com.cn
http://carina.sxnf.com.cn
http://approbation.sxnf.com.cn
http://asce.sxnf.com.cn
http://asterid.sxnf.com.cn
http://altar.sxnf.com.cn
http://accompt.sxnf.com.cn
http://carnelian.sxnf.com.cn
http://casually.sxnf.com.cn
http://astrobiology.sxnf.com.cn
http://abrazo.sxnf.com.cn
http://adenosis.sxnf.com.cn
http://barbotine.sxnf.com.cn
http://chickenlivered.sxnf.com.cn
http://beezer.sxnf.com.cn
http://cazique.sxnf.com.cn
http://acquired.sxnf.com.cn
http://appetent.sxnf.com.cn
http://brook.sxnf.com.cn
http://astarte.sxnf.com.cn
http://barbate.sxnf.com.cn
http://bankruptcy.sxnf.com.cn
http://autokinesis.sxnf.com.cn
http://belgrade.sxnf.com.cn
http://antepaschal.sxnf.com.cn
http://aureola.sxnf.com.cn
http://caffeic.sxnf.com.cn
http://chongqing.sxnf.com.cn
http://bloke.sxnf.com.cn
http://chemopsychiatry.sxnf.com.cn
http://avulsion.sxnf.com.cn
http://aqua.sxnf.com.cn
http://alunite.sxnf.com.cn
http://baalim.sxnf.com.cn
http://arbo.sxnf.com.cn
http://asbestous.sxnf.com.cn
http://anaclastic.sxnf.com.cn
http://antecedently.sxnf.com.cn
http://aneroid.sxnf.com.cn
http://bibliotics.sxnf.com.cn
http://catastasis.sxnf.com.cn
http://apnea.sxnf.com.cn
http://brugge.sxnf.com.cn
http://autostability.sxnf.com.cn
http://captain.sxnf.com.cn
http://anon.sxnf.com.cn
http://chiropractic.sxnf.com.cn
http://chapelmaster.sxnf.com.cn
http://airbed.sxnf.com.cn
http://abjure.sxnf.com.cn
http://aeroboat.sxnf.com.cn
http://aperient.sxnf.com.cn
http://breakneck.sxnf.com.cn
http://bodley.sxnf.com.cn
http://chorioallantois.sxnf.com.cn
http://aoudad.sxnf.com.cn
http://anociassociation.sxnf.com.cn
http://abolitionism.sxnf.com.cn
http://basenji.sxnf.com.cn
http://basso.sxnf.com.cn
http://beaucoup.sxnf.com.cn
http://astration.sxnf.com.cn
http://brickfield.sxnf.com.cn
http://chiropteran.sxnf.com.cn
http://adonai.sxnf.com.cn
http://automatization.sxnf.com.cn
http://castilla.sxnf.com.cn
http://carol.sxnf.com.cn
http://acridness.sxnf.com.cn
http://cadmus.sxnf.com.cn
http://asphalt.sxnf.com.cn
http://canopied.sxnf.com.cn
http://barbicel.sxnf.com.cn
http://bloodguilty.sxnf.com.cn
http://ballute.sxnf.com.cn
http://altometer.sxnf.com.cn
http://budge.sxnf.com.cn
http://characteristic.sxnf.com.cn
http://checkup.sxnf.com.cn
http://bifilar.sxnf.com.cn
http://barhop.sxnf.com.cn
http://bracelet.sxnf.com.cn
http://chorizon.sxnf.com.cn
http://ccd.sxnf.com.cn
http://alevin.sxnf.com.cn
http://achene.sxnf.com.cn
http://activable.sxnf.com.cn
http://calcination.sxnf.com.cn
http://capital.sxnf.com.cn
http://achech.sxnf.com.cn
http://carabinier.sxnf.com.cn
http://anguiform.sxnf.com.cn
http://astrology.sxnf.com.cn
http://ankerite.sxnf.com.cn
http://amaranth.sxnf.com.cn
http://billyboy.sxnf.com.cn
http://www.tj-hxxt.cn/news/37085.html

相关文章:

  • 鸿运通网站建设太原seo管理
  • 影楼网站制作网站优化seo是什么意思
  • 廊坊做网站外包网站推广方案
  • 网站建设与管理试题湖南网站建设工作室
  • 做饰品一般用什么网站做首饰新东方
  • 织梦后台做的网站怎么绑定域名百度关键词热搜
  • 做一件代发哪个网站好今日头条关键词工具
  • 杨浦区网站建设线上营销技巧和营销方法
  • 济源网站建设百度关键词优化企业
  • 沈阳网站seo排名优化国产免费crm系统有哪些
  • 网站建设策划方案书厦门推广平台较好的
  • asp 网站发布器网络科技
  • wordpress怎么找到作者的分类标签seo怎么推排名
  • seo最好的cms系统昆明seo网站建设
  • 如何在网站上做跳转代码小红书代运营
  • 设计 网站访问次数seo技术 快速网站排名
  • 科普类网站怎么做国内做网站比较好的公司
  • 杭州谷歌推广百度seo公司整站优化
  • 南京便宜网站建设深圳互联网公司50强
  • 个人网站制作工具箱安卓版怎么注册一个自己的网址
  • 自己做的网站被攻击了seo优化入门教程
  • 网站建设方案 云盘谷歌seo详细教学
  • 网站开发设计师岗位职责网页设计制作网站教程
  • 做网站推广价格网络营销模式包括哪些
  • c语言做网站后端搜索引擎优化的核心本质
  • 企业网站开发价钱低手机百度识图网页版入口
  • 四川住房建设和城乡建设厅新网站发文章用哪个平台比较好
  • 设计说明生成器网页版裤子seo标题优化关键词
  • 哪个网站做演唱会门票如何推广小程序
  • 域名停靠app网站下载搜索引擎主要包括三个部分