什么是最快的排序阵列?

时间:2012-02-11 08:52:02

标签: c# sorting

我使用选择排序,但我想要一个比这更好的排序解决方案:

    static void SelectionSort(int[] a)
    {
        int temp, pmin;
        for (int i=0; i<a.Length-1; i++)
        {
            pmin=i;
            for (int j=i+1; j<a.Length; j++)
            if (a[j]<a[pmin])
                pmin=j;
            temp = a[i];
            a[i] = a[pmin];
            a[pmin] = temp;
        }
    }

6 个答案:

答案 0 :(得分:3)

只需使用:

Array.Sort(a);

哪个会做QuickSort。

答案 1 :(得分:2)

如果你看wikipedia,就不同的排序算法的空间和时间复杂度进行了很好的比较。许多平均时间n lg nn很适合您的需求。

此外,.NET内置了几种排序算法。包括Array.Sort()List.Sort()

答案 2 :(得分:2)

linq

中使用Array.Sort(a)orderby

答案 3 :(得分:1)

排序算法没有绝对的赢家。效率取决于阵列的大小,内容和状态。 只知道什么对你最好。

查看here示例和衡量标准。

答案 4 :(得分:1)

只需使用Array中的内置函数:Array.Sort(a)

答案 5 :(得分:0)

要获得最快的排序算法,您应该使用heap sort。与所有其他排序算法相比,它具有最低的时间复杂度

A program to implement Heap Sort

#include<stdio.h>

void restoreHup(int*,int);
void restoreHdown(int*,int,int);

void main()
{
    int a[20],n,i,j,k;
    printf("   Enter the number of elements to sort : ");
    scanf("%d",&n);

    printf("Enter the elements : ");
    for(i=1;i<=n;i++){
            scanf("%d",&a[i]);
            restoreHup(a,i);
    }


    j=n;
    for(i=1;i<=j;i++)
    {
            int temp;
            temp=a[1];
            a[1]=a[n];
            a[n]=temp;
            n--;
            restoreHdown(a,1,n);
    }

    n=j;

    printf("Here is it...");
    for(i=1;i<=n;i++)
            printf("%4d",a[i]);
    }



    void restoreHup(int *a,int i)
    {
     int v=a[i];

     while((i>1)&&(a[i/2]<v))
     {
            a[i]=a[i/2];
            i=i/2;
     }
     a[i]=v;
    }

    void restoreHdown(int *a,int i,int n)
   {
    int v=a[i];
    int j=i*2;
    while(j<=n)
    {
            if((j<n)&&(a[j]<a[j+1]))
                    j++;
            if(a[j]<a[j/2]) break;

            a[j/2]=a[j];
            j=j*2;
    }
    a[j/2]=v;
   }