当前位置: 首页 > 知识库问答 >
问题:

如何检测快速排序算法已对所有元素进行排序?

慕学海
2023-03-14

我知道这听起来很奇怪,但是,我正在开发一个应用程序,当quicksort完成对数组的排序时,我必须执行一些操作,我需要找到起始索引、结束索引或透视之间的任何关系,或者任何可以告诉我这将是对数组排序所需的最后一个分区/交换...

fun quickSort2(arr: ArrayList<Int>, start: Int, end: Int, from: String) {
if (start >= end) return
val p = partitions(arr, start, end , from)
quickSort2(arr, start, p - 1, "first")
quickSort2(arr, p + 1, end, "second")
}

配分函数:

fun partitions(arr: ArrayList<Int>, start: Int, end: Int , from: String): Int {
val pivotValue = arr[end]
var pivotIndex = start
for (i in start until end) {
    if (arr[i] < pivotValue) {
        swap(arr, i, pivotIndex)
        pivotIndex++
    }
}
swap(arr, pivotIndex, end)
return pivotIndex
}

交换功能:

fun swap(arr: ArrayList<Int>, i: Int, pivotIndex: Int) {
val temp = arr[i]
arr[i] = arr[pivotIndex]
arr[pivotIndex] = temp
}

共有1个答案

华宏逸
2023-03-14

您不需要检查任何内容:只需在完整的数组上调用quicksort2一次。一旦这个调用返回,您就可以确定整个数组已经排序

这是因为quicksort2总是在较小的子数组上调用自身,并且会检查子数组是否为空(if(start>=end)return)。

为了确保情况确实如此,您可以在quicksort2的开头添加一些日志信息,显示输入参数。

 类似资料:
  • 快速排序,这是一个经典的算法,本文给出几种python的写法,供参考。 特别是python能用一句话实现快速排序。 思路说明 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 (1) 分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解

  • 主要内容:快速排序算法的实现提到排序算法,多数人最先想到的就是快速排序算法。快速排序算法是在分治算法基础上设计出来的一种排序算法,和其它排序算法相比,快速排序算法具有效率高、耗费资源少、容易实现等优点。 快速排序算法的实现思路是: 从待排序序列中任选一个元素(假设为 pivot)作为中间元素,将所有比 pivot 小的元素移动到它的左边,所有比 pivot 大的元素移动到它的右边; pivot 左右两边的子序列看作是两个待排

  • JavaScript算法-快速排序 快速排序是处理大数据集最快的排序算法之一。它是一种分而治之的算法,通过递归的方式将数据依次分解为包含较小元素和较大元素的不同子序列。该算法不断重复这个步骤直到所有数据都是有序的。 这个算法首先要在列表中选择一个元素作为基准值(pivot)。数据排序围绕基准值进行,将列表中小于基准值的元素移到数组的底部,将大于基准值的元素移到数组的顶部。 快速排序的算法和伪代码

  • 主要内容:算法总结及实现,优化算法在实际开发中,有很多场景需要我们将数组元素按照从大到小(或者从小到大)的顺序排列,这样在查阅数据时会更加直观,例如: 一个保存了班级学号的数组,排序后更容易分区好学生和坏学生; 一个保存了商品单价的数组,排序后更容易看出它们的性价比。 对数组元素进行排序的方法有很多种,比如冒泡排序、归并排序、选择排序、插入排序、快速排序等,其中最经典最需要掌握的是「冒泡排序」。 以从小到大排序为例,冒泡排序的整体

  • 我知道它是如何工作的,如果我不知道的话,网上有很多资料供我查阅。我在这里遇到的问题是,我找到的一些文章陈述如下(来自维基百科): 对数组重新排序,使所有值小于透视的元素都在透视之前,而所有值大于透视的元素都在透视之后(相等的值可以从任一方向移动)。分区后,枢轴处于其最终位置。这称为分区操作。 其他一些消息来源,(hackerrank视频): 第二种方法与枢轴本身无关,但它将确保所有比枢轴小的元素在

  • 本文向大家介绍C#排序算法之快速排序解析,包括了C#排序算法之快速排序解析的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C#实现快速排序的具体代码,供大家参考,具体内容如下 代码: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。