我试图转换我的排序,以便它可以采取任何数据类型

本文关键字:数据类型 任何 转换 我的 排序 | 更新日期: 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:该对象等于方法参数。

大于零:该对象大于方法参数。