【发布时间】:2015-06-26 07:19:41
【问题描述】:
我试图从一些 java 编程书籍中解决以下编程练习
Write 方法使用第一个元素(称为枢轴)对数组进行分区。分区后,列表中的元素重新排列,使得枢轴之前的所有元素都小于或等于枢轴,枢轴之后的元素都大于枢轴。该方法返回新列表中枢轴所在的索引。例如,假设列表是 {5, 2, 9, 3, 6, 8}。分区后,列表变为{3, 2, 5, 9, 6, 8}。以最多进行
array.length比较的方式实现该方法。
我已经实现了解决方案,但它需要的远不止array.length 比较。
这本书本身有解决方案,但不幸的是它完全是错误的(不使用某些输入)。我已经看到了this 类似问题的答案,并且理解了快速排序算法的“征服”部分,但是在这个算法中,值使用中间值进行分区,但在我的情况下,需要使用第一个数组值作为枢轴。
【问题讨论】:
-
你有什么问题?
-
不,我的意思是这是分区的一般形式,它只需要 O(n) 次比较,因为你会将枢轴与所有其他元素进行比较。
-
你必须向我们展示你在代码中的最佳尝试,并准确解释你得到了什么意想不到的结果。
-
这是来自快速排序的分区。您可以在wikipedia's quick sort article 中找到它的伪代码