- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所有变量名均来自Quicksort's wikipedia page Lomuto 和 Hoare 的快速排序伪代码。
如果 p
是 partition
函数返回的值,Hoare 将他的数组从 lo
划分为 p
从 p+1
到 hi
,而 Lomuto 将他的数组从 lo
划分到 p-1
并从 p+1
到 hi
。
我可能错了,但 Quicksort 的理念是......
我发现 Hoare 的 partition
比 Lomuto 的更容易理解。霍尔分区只是指示我们从左端和右端开始,并不断向对方移动。如果左标记遇到大于枢轴的元素,则左标记暂停,等待右标记找到小于枢轴的元素。然后他们交换元素,这样左边的标记有较小的元素,右边的标记有较大的元素。他们一直这样做,直到他们见面。非常简单。
Lomuto 的分区
,可以看作是一条蛇,由头和尾两部分组成。枢轴是固定的(我通常将最后一个元素作为 Lomuto 的枢轴)。蛇从左侧开始,并在最后一个元素之前停止。当蛇遇到一个小于枢轴的元素时,该元素会移动到尾部并且尾部的长度会增加。当发现大于枢轴的元素时,该元素将转到蛇的头部。最后,枢轴位于尾部和头部之间。它非常清晰,但不如 Hoare 的分区
直观或高效(在某些情况下)。
让我感到困惑的是,Hoare 的分区不能确保在 partition
完成其过程后枢轴的位置将是它在最终排序数组中的位置。在 Hoare 的分区中,我唯一能识别的模式是 i
位于枢轴的final position 并且 j
是 i
或 i-1
,j
和 i
是左右标记。
然而,Lomuto 的分区保证了这一点。所以,当我退一步看大局时,Lomuto 将数组从 lo
划分为 p-1
并从 p+1 划分是有意义的
到 hi
。但是,我无法理解 Hoare 如何将他的数组从 lo
划分为 p
以及从 p+1
划分为 嗨
,弥补他的分区没有将其枢轴放在正确的位置。
最佳答案
我一直在研究示例并自己通过 Hoare 的快速排序对数组进行排序。我想我在 Hoare 的分区算法中发现了另一个有趣的模式。这可以解释为什么 Hoare 的方法有效。 Lomuto 将数组分成三个部分;小于枢轴的元素,枢轴,大于枢轴的元素。我认为霍尔看待事物的方式不同。他将数组分成两部分;小于主元的元素,等于或大于主元的元素。我陷入的陷阱之一是 Lomuto 的分区返回主元的最终位置,而 Hoare 的分区返回主元最终位置之前的位置。这就是 Lomuto 然后快速排序的原因lo
到 p-1
,而 Hoare 快速排序从 lo
到 p
。可以得出的另一个推论是,如果 Hoare 的 partition
返回 i
而不是 j
,那么我们会将数组分成两部分 - 从lo
到 i-1
以及从 i+1
到 hi
,就像 Lomuto 所做的那样。我只花了 4 个小时就明白了这一点。
关于sorting - Hoare 的快速排序如何工作,即使在 partition() 之后枢轴的最终位置不是它在排序数组中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46130746/
我正在尝试获取从过去的 startposition/location 到当前移动的 currentposition/location 的距离(以米为单位)。 我确实有工作正常的currentposit
所以我有一堆绝对覆盖的 div。用户通过在叠加层上拖动来创建方形 div。如果您要创建一个 div,然后放大和缩小,div 会保持在同一位置,因为它对叠加层是绝对的,如前所述。 然而问题就出在这里。您
我想找到 View 在显示屏幕上的位置。 为此,我使用了 view.getLeft() 、view.getBottom() 、view.getRight() 等方法> , view.getTop()。
我有一个看起来像这样的 View 层次结构(基于其他答案和 Apple 的使用 UIScrollView 的高级 AutoLayout 指南): ScrollView 所需的2 个步骤是: 为 Scr
所以我有一个名为 MARKS 的表,我有这些列 STUDENT_ID, CLASSFORM_NAME, ACADEMIC_YEAR, TERM, SUBJECT_NAME, TOTAL_MARKS
我有一个问题我无法理解,请帮助: 我开发了带有图像的 html 页面,并使用 jQuery UI 帮助使它们可拖动,我将这些图像位置设置为相对位置并给出了左侧和顶部像素,这是页面的链接 http://
我正在尝试创建一个 CSS 动画,它在 sprite 表中循环播放 16 个图像,给人一种幽灵“漂浮”的错觉。动画通过在 background-position 位置之间移动以显示不同状态的幽灵来实现
我正在创建这个网站的 WebView https://nearxt.com/打开时询问位置但是当我使用此链接在 flutter 中创建 webview 时那么它就无法定位我还在应用程序中定义了位置,但
我正在以编程方式创建一个需要跨越 2 个屏幕的窗口。正在创建的窗口的大小是正确的,但窗口大约从第一个屏幕的一半开始。我可以将它拖回第一个屏幕的开头,NSWindow 非常适合。 我只需要知道在窗口的起
位置“/”的匹配叶路由没有元素。这意味着默认情况下它将呈现一个空值,从而导致一个“空”页面 //App.js File import { BrowserRouter as Router, Routes
我有一个运行 Ubuntu 和 Apache 的 VPS 例如,假设地址是:5.5.5.5 在 VPS 上,我有一个名为 eggdrop 的用户(除了我的 root 用户)。 用户 eggdrop 有
我有一个 JLabel与 ImageIcon ,我使用 setIcon() JLabel中的函数. ImageIcon然后上来,坐在我的JLabel 的文字左侧.是否有可能拥有 ImageIcon在文
我的图中有节点,它们的 xlabels 位于它们的左上方。我怎样才能改变这个位置?我希望 xlabels 正好位于节点本身的旁边。 最佳答案 xlp是你想要的属性,但它没有做任何事情。 你不能改变位置
我对基本的 VIM 功能有疑问:(我尝试谷歌搜索但找不到答案) 如何列出所有自定义功能。(我做了 :function 并且不能找到我的自定义函数) 如何获得自定义函数列表中的函数(或它们的存储位置)。
我是 PHP 的新手,虽然我一直在搜索,但我不知道该怎么做。 我知道可以使用 Location("some page") 进行重定向。我还读到,只要没有向用户显示任何内容,它就可以工作。 我想做的是:
如果在 jgrowl.css 中位置更改为“center”,我如何将其覆盖为默认值,即“top-right” $.jGrowl(data, { header: 'data', an
我需要根据用户是否滑动屏幕顶部、屏幕中间或屏幕底部来触发不同的事件。我正在尝试找出最好/最简单的方法来做到这一点,因为我很确定没有办法从 UISwipeGestureRecognizer 获取位置。
我需要枚举用delphi编写的外部应用程序中使用的类 ,因此我需要访问VMT表以获取该信息,但是我找不到任何有关如何在exe(由delphi生成)文件中找到VMT(虚拟方法表)的位置(地址)的文档。
在 D2010 (unicode) 中是否有像 Pos 这样不区分大小写的类似函数? 我知道我可以使用 Pos(AnsiUpperCase(FindString), AnsiUpperCase(Sou
我正在尝试为我的reveal.js 演示文稿制作一个标题,该标题会粘贴在屏幕顶部。标题中的内容在每张幻灯片的基础上都是动态的,因此我必须将标记放在 section 标记中。 显然,如果标记在 sect
我是一名优秀的程序员,十分优秀!