我需要帮助来理解编程挑战
I need help understanding a programming challenge
我正在尝试做一些作业,但无法绕开一个问题。我已经在课堂讨论板上发帖并给教授发了电子邮件,但没有得到任何帮助。
问题是:设计一个类 abstractSort,该类可用于分析排序算法执行的比较次数。该类应该有一个能够比较两个数组元素的成员函数 compare,以及一种跟踪执行的比较次数的方法。该类应该是具有纯虚成员函数的抽象类
virtual void Sort(int arr[], int size)= 0;
当被覆盖时,它将通过调用 compare 函数对数组进行排序,以确定数字对的相对顺序(这是我不明白的短语)。创建 AbstractSort 的子类,该子类使用简单的排序算法来实现排序函数。该类应具有一个成员函数,可以在完成排序后调用该函数以确定执行的比较次数。
我对如何编码有一个想法,但我只是不认为我按照问题的措辞去做。我编写了代码,通过递增计数器并输出该数字来跟踪比较。然而,这个问题困扰着我。作者说"通过调用比较函数来确定数字对的相对顺序"是什么意思
有人知道它们的意思吗? 我只是把一个明显的问题过于复杂化,还是有一些我看不到的微妙挑战。正如我所说,我不需要帮助编码问题,只需要理解问题。
在大多数排序算法的普通实现过程中的某个时刻,你会得到这样的东西:
if (elements[i] < elements[j]) {
// Do something
}
else {
// Do something else
}
将比较元素的工作"外包"到单独的函数通常很方便(为了简单起见,我假设要排序的元素是整数):
protected:
bool isSmaller(int a, int b) {
return a < b;
}
// Inside sorting function:
if (isSmaller(elements[i], elements[j])) { ... } else { ... }
结合继承,您可以在基类中定义isSmaller()
,并且对于要实现的每个排序算法(快速排序、合并排序、插入排序......),您将创建一个新的子类。但是,每个子类都应该调用isSmaller()
,而不是使用 <
来确定哪些元素应该在哪个元素之前。然后,您可以将"计算比较次数"代码(如您所说,只需增加计数器)添加到isSmaller()
。
(该任务的重点是让您意识到继承可以使您不必在每个排序算法实现中复制计数代码。此外,当使用函数指针或函数对象时,"外包"比较的想法也可用于制作一个"可配置"的排序类,在该类的用户可以决定如何执行比较,以便例如降序排序数字,或根据他们的名字对人员列表进行排序, 等)
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 模板元编程:如何将参数包组合成新的参数包
- Qt Q串行端口未编程设备未关闭
- 模板元编程 - 尝试实现维度分析
- 我是编程新手
- 你能帮我解决删除数组 c++ 中重复值的挑战吗?
- C++编程从外部文本文件定义数组大小
- 了解算法的性能差异(如果以不同的编程语言实现)
- 使用 Gtkmm 以编程方式选择 Gtk::TextView 中的文本
- 如何将可变参数模板转换为多个单个模板?(C++竞争编程调试模板)
- 如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)
- 使用命名空间正确编程
- C++编程:运算符重载中的引用如何工作?
- Arduino 模块化编程与全局和设置
- 玩数字编程挑战(子数组的平均值)
- 我需要帮助来理解编程挑战
- 这个C++代码有什么问题?3n+1 在编程挑战/UVa 中
- 算法输出正确答案,但编程挑战给了我错误的答案
- 帮助解决编程挑战