仅使用 3 个元素对 int 数组进行排序
Posted
技术标签:
【中文标题】仅使用 3 个元素对 int 数组进行排序【英文标题】:sorting int array with only 3 elements 【发布时间】:2011-06-15 03:53:08 【问题描述】:我有这个数组:
int [] myarray = 17, 6, 8;
用伪代码对该数组进行排序的最佳方法是什么?
谢谢!
【问题讨论】:
sorted(a)
和我的伪 sorted
函数就地排序:)
许多重复项,例如***.com/questions/3319993/…
简单:int [] myarray = 6, 8, 17;
:)
【参考方案1】:
此代码在最坏的情况下进行 2 或 3 次比较和 4 条内存记录,而不是另一个答案(在最坏的情况下总是 3 次比较和 9 条内存记录)。
if a[0] < a[1]:
if a[1] > a[2]:
if a[0] < a[2]:
temp = a[1]
a[1] = a[2]
a[2] = temp
else:
temp = a[0]
a[0] = a[2]
a[2] = a[1]
a[1] = temp
else:
# do nothing
else:
if a[1] < a[2]:
if a[0] < a[2]:
temp = a[0]
a[0] = a[1]
a[1] = temp
else:
temp = a[0]
a[0] = a[1]
a[1] = a[2]
a[2] = temp
else:
temp = a[0]
a[0] = a[2]
a[2] = temp
【讨论】:
我会给你+1,adamax。虽然读起来很丑,但问题确实要求最佳,而你的问题似乎满足:-) 您的算法使用 2, 3, 1 数组产生不正确的结果。 @ionree 当然,我修复了代码。如果您查看the original code,您会发现执行路径最终会交换两个元素,而每个元素都必须移动。 轻微优化:如果a[0]
==a[1]`,将第一个<
比较替换为=<
将避免不必要的交换。【参考方案2】:
May this graphic 显示用于对三个元素进行排序的决策树有助于:
【讨论】:
这是出自哪本书? 这是来自 Volker Heun 的“Grundlegende Algorithmen”(www14.in.tum.de/~ga)——不幸的是只有德语。在 Cormen 等人 (mitpress.mit.edu/books/introduction-algorithms) 的“算法简介”中可以找到一个非常相似的图。 我知道我在什么地方见过它……也许它也在 Sedgewick 的书中?但对于其他想知道它确实在 CLRS 中的人来说,在“线性时间排序”下。谢谢!【参考方案3】:比展开的冒泡排序稍微高效一些,不是最优的,但仍然很简单
if (el1 > el2) Swap(el1, el2)
if (el2 > el3)
Swap(el2, el3)
if (el1 > el2) Swap(el1, el2)
【讨论】:
我不敢相信有人投了反对票。它在–1。我刚刚投了赞成票,现在它是 0。【参考方案4】:我认为这应该很快(升序):
if (el1 > el2) Swap(el1,el2)
if (el2 > el3) Swap(el2,el3)
if (el1 > el2) Swap(el1,el2)
【讨论】:
您的经典展开冒泡排序 :-) +1。以上是关于仅使用 3 个元素对 int 数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章