【问题标题】:Quick sort where the first element in the array is smaller数组中第一个元素较小的快速排序
【发布时间】:2018-12-22 02:54:53
【问题描述】:

考虑一个元素数组 {10,5,20,15,25,22,21}。


在这里,我将枢轴元素设为 21(数组中的最后一个)。根据我在互联网上看到的大多数快速排序算法,他们解释了开始第一个元素与枢轴元素进行比较。如果它更小,它将与索引元素交换。但是该算法在数组中有第一个小元素时会中断,这使我很难写下快速排序将经历的中间步骤。 互联网上的所有家伙都以数组的第一个元素大于枢轴的示例进行了解释,因此在比较时他们没有交换并移动到下一个元素。

请帮忙。

【问题讨论】:

  • 你可以交换它们。有什么问题?
  • 较小的元素向右移动,似乎更加未排序。我可以参考任何教程链接以通过示例了解快速排序算法吗?如果你能建议..
  • 为了解释他们的代码为什么会这样工作,我们需要查看代码。

标签: algorithm sorting data-structures quicksort


【解决方案1】:

我对如何理解快速排序的建议:

理解快速排序的关键是partition 过程,通常是for loop。请记住:

  1. 我们的目标是让数组最终变成一个由loop末尾的三部分组成的数组:第一部分小于pivot,第二部分等于或大于pivot,最后一个part 是未排序的部分(没有元素)。
  2. 在循环的最开始,我们还有三个部分:第一部分(没有元素)小于枢轴,第二部分(没有元素)等于或大于枢轴,最后一部分是未排序的部分(具有array.length-1 元素)。
  3. loop期间,我们根据需要进行比较和交换,以确保在每个循环中,我们始终拥有这三个部分,并且第一个和第二个部分的大小在增加,最后一个部分的大小是减少。

根据您在评论中的要求:

查看此链接:https://www.cs.rochester.edu/~gildea/csc282/slides/C07-quicksort.pdf

请仔细阅读这三个示例图,并确保您已理解它们。

【讨论】:

  • 谢谢,给出的算法和“另一个例子”帮助我很好地理解了。该 PDF 文章中的“另一个示例”也解决了我的第一个元素很小的查询。再次感谢! :)
猜你喜欢
  • 2021-09-05
  • 2019-04-12
  • 1970-01-01
  • 2011-10-08
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
相关资源
最近更新 更多