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