Какой самый быстрый вид сортировки массива? - PullRequest
0 голосов
/ 11 февраля 2012

Я использую сортировку выбора, но я хочу лучшее решение для сортировки, чем это:

    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 ]

3 голосов
/ 11 февраля 2012

Просто используйте:

Array.Sort(a);

Что сделает QuickSort.

2 голосов
/ 11 февраля 2012

использовать Array.Sort(a) или orderby в linq

2 голосов
/ 11 февраля 2012

Если вы посмотрите на википедию , то вы найдете хорошее сравнение различных алгоритмов сортировки с точки зрения их пространственной и временной сложности.Многие из них имеют среднее значение n lg n или n, которое должно соответствовать вашим потребностям.

Кроме того, в .NET встроено несколько встроенных алгоритмов сортировки. В том числе Array.Sort () и list.sort ()

1 голос
/ 11 февраля 2012

просто используйте встроенную функцию в Array: Array.Sort(a)

1 голос
/ 11 февраля 2012

Нет абсолютного победителя в алгоритмах сортировки.Эффективность зависит от размера, содержания, состояния массива. Вы знаете только то, что лучше для вас.

Смотрите здесь для примеров и измерений.

0 голосов
/ 11 февраля 2012

Чтобы иметь самый быстрый алгоритм сортировки, вы должны использовать 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;
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...