【发布时间】:2020-07-11 05:43:03
【问题描述】:
我创建了对类和数组类,但我不知道如何实现快速排序算法。 如果整数相同,我想这样做,那么我应该按双倍排序。我能够用每个数组索引一个值来实现快速排序,但是我找不到任何资源。
也许你们有一些资源,或者你们有同样的问题?
顺便说一句,我正在尝试用 c# 来实现它。
这是我的双人班:
class Pair
{
public int integer = 0;
public double doubl = 0.0;
public Pair(int integer, double doubl)
{
this.integer = integer;
this.doubl = doubl;
}
public Pair()
{
}
public int Integer() { return integer; }
public double Doubl() { return doubl; }
}
还有我的数据数组类
class MyDataArray : DataArray
{
Pair[] data;
int operations = 0;
public MyDataArray(int n, int seed)
{
data = new Pair[n];
Random rand = new Random(seed);
for (int i = 0; i < n; i++)
{
data[i] = new Pair(rand.Next(1,100), rand.NextDouble());
}
}
public override int integer(int index)
{
return data[index].integer;
}
public override double doubl(int index)
{
return data[index].doubl;
}
public override void Swap(int i, int j)
{
Pair temp = data[i]; // c3 1
data[i] = data[j]; // c3 1
data[j] = temp; // c3 1
}
【问题讨论】:
-
只需比较整数,如果它们相同,则比较双精度数,如您所说。否则,它与按任何东西排序完全相同。
-
您需要决定是什么让一个实例比另一个更大(您是先按整数排序还是先按双精度排序)。您需要定义相等的含义(请记住,浮点的相等很棘手)。然后您应该实现适当的接口(例如
IComparable)并将其用于您的比较。有些规则必须遵守(例如,如果 A>B 且 C>A,则 C>B,但不仅如此)。 -
旁注:不推荐使用公共字段。同样使用看起来像属性的方法(
Integer()和Doubl())非常令人困惑。public Integer {get;set;}会更短更传统。