【问题标题】:Given an unsorted array ???? of n integers and an integer x, rearrange the elements in ????给定一个未排序的数组???? n 个整数和一个整数 x,重新排列 ???? 中的元素
【发布时间】:2019-11-23 10:21:55
【问题描述】:

给定一个未排序的数组 ???? n 个整数和一个整数 x,重新排列 ???? 中的元素使得所有小于或等于 x 的元素都在任何大于 x 的元素之前。

注意:不必在新数组中包含整数 x。

您的算法的运行时间复杂度是多少?解释你的答案。

【问题讨论】:

  • 嗨,你能分享一下你到目前为止尝试过的代码吗?
  • @J.S C++标准中有标准算法std::partition。:)
  • 遇到一个问题,可以尝试一下吗?解释你的尝试。
  • @J.S 在本站查看有关快速排序的问题。:)
  • 有一个简单的 O(n) 就地算法。忘记经典的排序算法

标签: java c++ algorithm pseudocode


【解决方案1】:

要尝试此操作,您首先需要了解排序算法、大 O 表示法,然后查看哪种排序算法最适合所提出的问题。

1) 鉴于您的问题定义了一些值出现在设定点之前,而另一些值在设定点之后,合并排序在这里是最好的。见this

2) 阅读大 O 表示法和某些排序算法的时间复杂度。总是有最好的情况和最坏的情况。您还可以使用此表示法计算您设计的任何算法的复杂性。见下文。

Calculating complexity of an algorithm

编辑: 为了提供帮助,这里有一个解决方案。

第 1 部分:

function sortHalf(List listToSort, value x):
    List firstHalf;
    List secondHalf;
    for (Integer i in listToSort):
        if i less than x then firstHalf.add(i);
        else if i greater than x then secondHalf.add(i);
    loop
    List finalList;
    finalList.addAll(firstHalf);
    finalList.addAll(secondHalf);
    return finalList;
end

第 2 部分:

上述算法的时间复杂度为O(n),其中nlistToSort 中的元素数。最好的情况是 O(1),其中有 1 个元素,最坏的情况是 O(n)

【讨论】:

  • [you] need to understand sorting algorithms [for this] 不,小于 x 的元素和更大的元素都不需要按任何特定顺序排列。这会使任何有关排序的声明无效。
  • 这个问题清楚地定义了列表需要最终排序,使得小于 x 的值在列表中之前,更大的值在之后。这本身是根据 x 的值排序的。只要符合规则,您就可以正确地说明值不需要按任何顺序排列。但这仍然符合 sorted 列表的定义 - Sorted - organized, arranged, or dealt with satisfactorily. @greybeard
猜你喜欢
  • 1970-01-01
  • 2021-11-19
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多