Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通用快速排序算法_C#_Algorithm_Generics - Fatal编程技术网

C# 通用快速排序算法

C# 通用快速排序算法,c#,algorithm,generics,C#,Algorithm,Generics,我是这个网站的新手,也是一个初学者。我得到了一个快速排序方法,它将对一组通用对象进行排序。我使用内置的compareTo方法,但是当我调用我的方法时,它不会编译。快速排序方法接受一个T项数组和一个int left和int right。我不知道如何调用我的方法,当我让它工作时,我的数组不会被排序。有人能给我任何帮助吗?我真的很难理解,就我所知,互联网上的大多数网站都有点复杂:(代码如下: namespace QuickSort2 { class Program {

我是这个网站的新手,也是一个初学者。我得到了一个快速排序方法,它将对一组通用对象进行排序。我使用内置的compareTo方法,但是当我调用我的方法时,它不会编译。快速排序方法接受一个T项数组和一个int left和int right。我不知道如何调用我的方法,当我让它工作时,我的数组不会被排序。有人能给我任何帮助吗?我真的很难理解,就我所知,互联网上的大多数网站都有点复杂:(代码如下:

    namespace QuickSort2
   {
    class Program
    {
     private void QuickSort<T>(T[] items, int left,  int right) where T: IComparable
     {
        int i, j;
        i = left; j = right;
        IComparable pivot = items[left];

        while (i <= j)
        {
            for (; (items[i].CompareTo(pivot) < 0) && (i.CompareTo(right) < 0); i++); 
            for (; (pivot.CompareTo(items[j]) < 0) && (j.CompareTo(left) > 0); j--); 

             if (i <= j) 
            swap(ref items[i++], ref items[j--]); 

        } 
             if (left < j) QuickSort<T>(items, left,  j); 
             if (i < right) QuickSort<T>(items, i, right); 
    }
     static void swap<T>(ref T x, ref T y)
    {
      //swapcount++;
        T temp = x;
        x = y;
        y = temp;
    }

    static void Main(string[] args)
    {
        IComparable[] array1 = { 3,5,7,8,1,2 };


        foreach (int s in array1)
        {
            Console.WriteLine(" {0} ", s);
        }

        Console.ReadKey();
        Console.WriteLine("Sorted version");
        foreach (int x in array1)
        {
            QuickSort(array1, 0, array1.Length - 1);
            Console.WriteLine(" {0} ", x);
        }
        Console.ReadKey();
    }


    }
   }
命名空间快速入门2
{
班级计划
{
私有void快速排序(T[]项,int left,int right),其中T:i可比较
{
int i,j;
i=左;j=右;
i可比较轴=项目[左];
而(i0;j-);
如果(i您的代码很好,但是您实际上没有调用
快速排序
方法…(编辑:编辑问题后不再为true…)

您还需要将
QuickSort
方法设置为静态,以便能够从静态方法
Main
调用它

private static void QuickSort<T>(T[] items, int left,  int right) where T: IComparable
private静态void快速排序(T[]项,int left,int right),其中T:IComparable

您这样做是为了学习吗?因为如果不是,您可以使用“它不会编译”:错误是什么?在哪一行?您似乎从未真正调用过快速排序函数。错误消息是什么?@thomasleveque我想错误应该在
交换上(ref items[…],ref items[…])
。我记得,您不能引用单个数组元素。@SimonBelanger,是的,您可以,而且这个快速排序方法实际上工作得很好。您好,我忘了包含调用。我用相同的方法调用它,但它仍然不起作用。错误是-非静态字段、方法或属性需要对象引用。@user3480999,请阅读我的w答案是,它解决了这个问题。它仍然不起作用:(它不会按正确的顺序对我的整数排序:(它一定与:while(i0)&&(j.CompareTo(left)>0);j--);if(i)有关
private static void QuickSort<T>(T[] items, int left,  int right) where T: IComparable