适用于不同场景下C#/ .NET的最佳排序算法

时间:2008-11-04 16:47:25

标签: c# .net algorithm sorting

在C#中对数据进行排序的最佳算法是什么?

是否有一种排序算法可以很好地处理80%的排序?

如果适用,请提供代码示例。

4 个答案:

答案 0 :(得分:43)

查看此网站: Sorting Comparisons with Animations

简答:快速排序

更长的回答: 上面的网站将通过一些漂亮的动画向您展示每种算法的优缺点。

简短的回答是没有最好的排序(但你知道,因为你说80%的时间:))但快速排序(或3路快速排序)可能是你可以使用的最佳通用算法

默认情况下,这是.Net中列表使用的算法,因此,如果您拥有的内容已经在列表中,则可以调用.Sort

如果您想了解如何实现此目的,我在上面指出的网站上有伪代码。

答案 1 :(得分:9)

你想要排序什么?有没有理由不使用:

List<T>.Sort() ? 

我确信这会使用QuickSort,您不必担心会出现任何编码错误。您可以实现IComparable来更改要排序的内容。

如果你的所有数据都不适合记忆......那么你就可以通过合并排序或其他方式进行比赛了。

答案 2 :(得分:2)

Bubblesort和Insertionsort是O(n ^ 2),Mergesort和Quicksort是O(nlogn)。您可以使用List中的Sort()方法来实现Quicksort,也可以尝试实现它并使其适应您的需要。这是一个基本的实现: 快速排序

//O(nlogn) 
public static void QuickSort(int[] array, int init, int end)
{
   if (init < end)
   {
       int pivot = Partition(array, init, end);
       QuickSort(array, init, pivot-1);
       QuickSort(array, pivot + 1, end);
   }   
}

//O(n)
private static int Partition(int[] array, int init, int end)
{
   int last = array[end];
   int i = init - 1;
   for (int j = init; j < end; j++)
   {
        if (array[j] <= last)
        {
            i++;
            Exchange(array, i, j);     
         }
    }
    Exchange(array, i + 1, end);
    return i + 1;
}

private static void Exchange(int[] array, int i, int j)
{
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

来自http://yadiragarnicabonome.com/sorting-arrays/

答案 3 :(得分:0)