我试图转换我的排序,以便它可以采取任何数据类型
本文关键字:数据类型 任何 转换 我的 排序 | 更新日期: 2023-09-27 18:12:25
public class Sort
{
// array of integers to hold values
//made it object to support any data type
private object[] array = null;
// number of elements in array
//made it object to support any data type
private object x;
public Sort()
{
//was an int
array = new object[100];
x = array.Length;
Random rand = new Random(5433);
for (int i = 0; i < array.Length; i++)
{
array[i] = rand.Next(-100, 100);
}
PrintArray();
q_sort(0, x - 1);
PrintArray();
}
private void PrintArray()
{
for (int i = 0; i < array.Length - 1; i++)
{
Console.Write(array[i] + ", ");
}
Console.WriteLine(array[array.Length - 1]);
}
public void q_sort(object left, object right)
{
object pivot, l_hold, r_hold;
l_hold = left;
r_hold = right;
pivot = array[Convert.ToInt32(left)];
while (Convert.ToInt32(left) < Convert.ToInt32(right))//This will only take integers?
{
while ((array[right] >= pivot) && (left < right))
{
right--;
}
if (left != right)
{
array[left] = array[right];
left++;
}
while ((array[left] <= pivot) && (left < right))
{
left++;
}
if (left != right)
{
array[right] = array[left];
right--;
}
}
array[left] = pivot;
pivot = left;
left = l_hold;
right = r_hold;
if (left < pivot)
{
q_sort(left, pivot - 1);
}
if (right > pivot)
{
q_sort(pivot + 1, right);
}
}
}
从我所能找到的是,我需要用一个对象类型来做这件事。我仍然是新的c#,所以我有一点麻烦与此。我的代码工作,如果我只让它接收整数,双精度等。我只是不确定如何通过sort
首先,您应该像下面这样使用一个泛型类:
public class Sort <T> where T : IComparable<T>
{
private T[] array;
private T object x;
...
public void q_sort(T left, T right)
{
T pivot, l_hold, r_hold;
...
}
}
其次,不使用>=
<=
>
<
或=
这样的操作符来比较对象,而是使用obj.CompareTo(otherObj)
,其中obj和otherObj都是t类型,然后您将能够根据CompareTo
的返回值确定它们的顺序。看到
根据http://msdn.microsoft.com/en-us/library/4d7sx9hd%28v=vs.110%29.aspx
的文档小于零:该对象小于方法参数。
0:该对象等于方法参数。
大于零:该对象大于方法参数。