我在c#中有关于面向对象编程的功课。作为我家庭作业的一部分,我需要制作2种不同的排序算法并将随机数放入其中,并观察有关2种不同算法的统计数据。 关于我的教导在电子邮件中说我" 非静态排序类可以统计排序有多少数字,多快,最小,最大,平均...... "
所以有我的排序算法,插入和计数排序。请告诉我如何保持有关排序的统计信息。
不要忘记我作业的主题是OOP。
class InsertionSorting : Sort
{
public override List<int> Sorting(List<int> SortList)
{
for ( int i=0; i<SortList.Count-1; i++)
{
for (int j= i+1; j>0; j--)
{
if (SortList[j-1] > SortList [j])
{
int temp = SortList[j - 1];
SortList[j - 1] = SortList[j];
SortList[j] = temp;
}
}
}
return SortList;
}
}
class CountSorting : Sort
{
public override List<int> Sorting(List<int> SortList)
{
int n = SortList.Count;
List<int> output = new List<int>();
List<int> count = new List<int>();
for (int i = 0; i < 1000; ++i)
{
count.Add(0);
output.Add(0);
}
for (int i = 0; i < n; ++i)
++count[SortList[i]];
for (int i = 1; i <= 999; ++i)
count[i] += count[i - 1];
for (int i = 0; i < n; ++i)
{
output[count[SortList[i]] - 1] = SortList[i];
--count[SortList[i]];
}
for (int i = 0; i < SortList.Count; i++)
SortList[i] = output[i];
return SortList;
}
}
答案 0 :(得分:0)
您的分类分为两类 - InsertionSorting&amp; CountSorting。
如果你想跟踪统计数据,在类中声明一个变量,并在每次迭代等时增加它。然后你可以看到哪一个更有效。
E.g
class InsertionSorting : Sort
{
private int iterations = 0
...
for (int j= i+1; j>0; j--)
{
if (SortList[j-1] > SortList [j])
{
iterations++
...
您还可以声明startTime和endTime,以便确定排序所花费的时间。在“排序”开始时记录开始时间,并在返回记录结束时间之前。写一种报告差异的方法。
答案 1 :(得分:0)
你的教授告诉你他们怎么说“...关于排序多少数字,多快,最小,最大,平均......的统计数据。”你最好的选择是创建一个类,如“统计”,其中包含允许用户输入的方法,通过args或直接用户提示。变量应该像“要排序的数字的数量”“数字范围的下限”,“数字范围的上限”一样简单,并且,如果自动化测试过程,“迭代的次数”。
给出这些问题的答案,你应该用它们运行两个排序算法(例如使用随机数生成器,并使用max和min生成列表。)你的排序算法需要添加“记录”这些统计数据。很可能是一个跟踪阵列中发生的位置交换次数的变量。
我不打算为你写出你的作业(这是你的工作,你应该擅长这一点。)但如果你有任何疑问,我可以引导你朝着正确的方向前进如果这太模糊了,你还在苦苦挣扎。