类到通用列表的排序

时间:2014-04-27 12:57:36

标签: c# sorting

我只是简单地排序通用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);
            }
        }
}

1 个答案:

答案 0 :(得分:2)

更改行

  

while (comparison(array[i], pivot) > 0) j--;

  

while (comparison(array[j], pivot) > 0) j--;

(将[i]改为[j])

你的代码进入无限循环