通用快速排序算法

时间:2014-03-31 12:16:28

标签: c# algorithm generics

我是这个网站的新手,也是初学程序员。我得到了一个快速排序方法,它将对一组通用对象进行排序。我正在使用in built compareTo方法但是当我来调用我的方法时,它不会编译。 quicksort方法接受一个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();
    }


    }
   }

1 个答案:

答案 0 :(得分:2)

您的代码很好,但您实际上并没有调用QuickSort方法... (编辑:在您编辑问题后不再是真的.. 。)

QuickSort(array1, 0, array1.Length - 1);

您还需要使QuickSort方法静态,以便能够从静态方法Main调用它。

private static void QuickSort<T>(T[] items, int left,  int right) where T: IComparable