我只是简单地排序通用List。我是通过使用quicksort来做到的。你能告诉我它为什么不起作用吗? (没有任何答案,程序一直都是工作)。
主要是我:
Console.WriteLine("Sort");
EnumerableAlgorithm.Sort<int>(l, (x, y) => x.CompareTo(y));
Console.WriteLine("Sort");
foreach (int i in l)
Console.WriteLine(i);
我只看到第一个“排序”。我知道为什么它不起作用。但是如果我在main之前使用函数Quicksort并调用它然后在Sort as
Program.QuickSort<T>(list, comparison, 0, list.Count-1);
它正在运作。我会感激你的帮助。提前致谢。我的班级下面要排序:
public static class EnumerableAlgorithm
{
public static void Sort<T>(List<T> list, Comparison<T> comparison)
{
QuickSort<T>(list, comparison, 0, list.Count-1);
}
public static void QuickSort<T>(List<T> array, Comparison<T> comparison, int left, int right)
{
var i = left;
var j = right;
var pivot = array[(left + right) / 2];
while (i < j)
{
while (comparison(array[i],pivot) < 0) i++;
while (comparison(array[i], pivot) > 0) j--;
if (i <= j)
{
// swap
var tmp = array[i];
array[i++] = array[j]; // ++ and -- inside array braces for shorter code
array[j--] = tmp;
}
if (left < j) EnumerableAlgorithm.QuickSort(array,comparison, left, j);
if (i < right) EnumerableAlgorithm.QuickSort(array, comparison, i, right);
}
}
}
答案 0 :(得分:2)
更改行
while (comparison(array[i], pivot) > 0) j--;
到
while (comparison(array[j], pivot) > 0) j--;
(将[i]改为[j])
你的代码进入无限循环