给出n个整数和一个整数x的未排序数组,,重新排列?中的元素,以使所有小于或等于x的元素都在大于x的元素之前。
注意:不必在新数组中包括整数x。
您的算法的运行时间复杂度是多少?解释你的答案。
答案 0 :(得分:-1)
要尝试此操作,您首先需要了解排序算法(Big O表示法),然后查看哪种排序算法最适合提出的问题。
1)鉴于您的问题定义了一些值在设置点之前,而某些在设置点之后,此处最好使用合并排序。参见this。
2)阅读有关Big 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)
,其中n
是listToSort
中元素的数量。最好的情况是O(1)
,其中有1个元素,最坏的情况是O(n)