C# 对列表框中的随机数进行快速排序+;IMG

C# 对列表框中的随机数进行快速排序+;IMG,c#,C#,我试图在列表框中快速排序10个随机数。但是我不能在我的随机iar上使用这种方法,有人能给我一些建议吗 代码隐藏按钮: private void btnSort_Click(object sender, EventArgs e) { Random r = new Random(); int n = 10; int[] iar = new int[n]; for (int i = 0; i < iar.L

我试图在列表框中快速排序10个随机数。但是我不能在我的随机iar上使用这种方法,有人能给我一些建议吗

代码隐藏按钮:

         private void btnSort_Click(object sender, EventArgs e)
    {
        Random r = new Random();
        int n = 10;
        int[] iar = new int[n];
        for (int i = 0; i < iar.Length; i++)
        {
            iar[i] = r.Next(0, 20);
            lb1.Items.Add(iar[i]);

        //here is the error i want to fill lb2 with the quicksorted array 
        // using the quicksort method

            Quicksort(iar, 0, iar.Length - 1);
        }
        for (int i = 0; i < iar.Length; i++)
        {
            lb2.Items.Add(iar[i]);
        }
    }
private void bSensor\u单击(对象发送者,事件参数e)
{
随机r=新随机();
int n=10;
int[]iar=新的int[n];
对于(int i=0;i
快速排序法

 public static void Quicksort(IComparable[] elements, int left, int right)
    {
        int i = left, j = right;
        IComparable pivot = elements[(left + right) / 2];

        while (i <= j)
        {
            while (elements[i].CompareTo(pivot) < 0)
            {
                i++;
            }
            while (elements[j].CompareTo(pivot) > 0)
            {
                j--;
            } 
            if (i <= j)
            {
                // Swap
                IComparable tmp = elements[i];
                elements[i] = elements[j];
                elements[j] = tmp;

                i++;
                j--;
            }
        }
        // Recursive calls
        if (left < j)
        {
            Quicksort(elements, left, j);
        }
        if (i < right)
        {
            Quicksort(elements, i, right);
        }
    }

}
公共静态void快速排序(IComparable[]元素,int left,int right)
{
int i=左,j=右;
i可比较轴=元素[(左+右)/2];
而(i 0)
{
j--;
} 

如果(i在给定的上下文中,不需要指定
IComparable
而不是
int
,因为您只使用整数。您还调用了
快速排序
,因为如果在已生成的列表上运行
快速排序
算法,每个数字都会在最有效的情况下生成,所以请移动语句在循环之外。也要记住,有更好的排序算法可以对这样的少量数据进行排序

单击事件处理程序:
private void bSensor\u单击(对象发送者,事件参数e)
{
随机r=新随机();
int n=10;
int[]iar=新的int[n];
//生成随机数并将其存储在未排序的列表框中
对于(int i=0;i
快速排序函数
//取整数数组而不是IComparable数组
公共静态void快速排序(int[]元素,int左,int右)
{
int i=左;
int j=右;
int pivot=元素[(左+右)/2];
而(i 0)
{
j--;
}

如果(i因为您已经声明了
Quicksort
方法来获取
IComparable
对象数组,那么您需要向它传递一个
IComparable
对象数组,而不是
int
s数组。一个明显的解决方案是声明一个包装类:

    class MyQuicksortableInt : IComparable
    {
        public int Value { get; set; }
        // Implementation of IComparable left as an exercise for the reader;
        // see http://msdn.microsoft.com/en-us/library/System.IComparable.aspx for details
    }
iar
更改为
MyQuicksortableInt[]
类型,您现有的
Quicksort
代码将愉快地接受它。

您需要执行以下操作:

public static void Quicksort<T>(T[] elements, int left, int right) where T:IComparable<T>

然后在任何地方使用T而不是IComparable

“我认为这个方法很好,但我无法调试它。”-你必须对此进行详细说明,因为最有可能得到的答案是“使用调试器”。如果手动排序的目的是因为你在学习算法,那么更重要的是,IComparable[]与int[]非常不同这是两个错误的根源。当创建一个未排序的字符串元素数组时。它确实有效。string是一个实现IComparable的类。int是一个不实现IComparable的原语。哦,好的,你能给我一些建议如何解决吗?首先,我用一个元素字符串对它进行了测试,就像pete说int不实现IComparable一样。
    class MyQuicksortableInt : IComparable
    {
        public int Value { get; set; }
        // Implementation of IComparable left as an exercise for the reader;
        // see http://msdn.microsoft.com/en-us/library/System.IComparable.aspx for details
    }
public static void Quicksort<T>(T[] elements, int left, int right) where T:IComparable<T>
public static void Quicksort(IComparable[] elements, int left, int right)