找到解决方案!
我正在想办法实现这个代码。
我需要做的是找到快速的方法来重新排列数组,这样所有cheese对象都将是数组第一部分的一部分,所有milk对象都在数组中间,bread对象在数组末尾。
有人帮忙吗?
public class Shop {
enum shoppingList {cheese, milk, bread};
public static void rearrange (shoppingList[] shopping) {
shoppingList cheese = shoppingList.cheese;
shoppingList milk = shoppingList.milk;
shoppingList bread = shoppingList.bread;
}
}
3条答案
按热度按时间ocebsuys1#
它出现在这里
cheese
值需要移到数组的开头,只要这里只使用两个值,rearrange
方法可以写成:kh212irz2#
当且仅当数组包含2个不同的元素时,该算法才适用于o(n)。首先,应该将两个不同的元素转换为0或1。
svmlkihl3#
由于只有枚举,从技术上讲,枚举没有对象标识,可以表示为整数,因此通常的比较排序(例如快速排序)不是最佳方法,因为它不会比
O(n long n)
.非比较排序将更快(例如,基数排序将更快)
O(w n)
)但在这个问题中,只有两个不同的值,所以排序可以在单个数组中完成O(n)
.您可以将其实现为:
使用计数器迭代数组
i
.每次您发现一个milk时,都会将它与数组中最后一个不是milk的元素交换。
把牛奶放在柜台里,记住最后有多少元素是牛奶
j
.什么时候停止
i
达到j
.所以可能是这样的:
请记住,复杂性不是性能,对于小数组(例如5个元素),方法的不同对排序时间的影响很小。